gpt4 book ai didi

php - unicode 模式下的 preg_split : delim_capture not working?

转载 作者:可可西里 更新时间:2023-11-01 00:24:47 24 4
gpt4 key购买 nike

我正在尝试使用正则表达式将一大块中文文本拆分成句子。就我而言,句子分隔符是:

  • 全角句号。(0x3002)
  • 全角问号?(0xFF1F)
  • 全角感叹号!(0xFF01)

现在,假设我的 $str 是这样的:$str = "你好。你好吗?我是程序员,不太懂这个我的问题,希望大家能帮得上忙!一起加油吧!";

我使用带有这些参数的 preg_split:

$str2 = preg_split("/([\x{3002}\x{FF01}\x{FF1F}])/u",$str,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);

$str2 现在是一个数组,如下所示:

array(3) { [0]=> string(6) "你好" [1]=> string(9) "你好吗" [2]=> string(91) " 我是程序员,不太懂这个我问题,希望大家能够帮忙!一起加油吧!" }

然而,预期的输出是:

[0] "你好。" 
[1] "你好吗?"
[2] "我是程序员,不太懂这个我问题,希望大家能够帮忙!"
[3] "一起加油吧!"

如您所见,存在两个问题:这不能正确处理感叹号,其次,我的全角句号和全角问号消失了。我希望 delim_capture 保留它们。我已经查看这段代码很长时间了,我不可能再弄清楚问题出在哪里了。我非常感谢您的建议。

最佳答案

您的正则表达式代码应该是这样的,以便能够捕获字符串 + 分隔符:

$str = "你好。你好吗? 我是程序员,不太懂这个我问题,希望大家能够帮忙!一起加油吧!";
$arr = preg_split("/\s*([^\x{3002}\x{FF01}\x{FF1F}]+[\x{3002}\x{FF01}\x{FF1F}]\s*)/u",
$str, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY );
var_dump($arr);

输出:

 array(4) {
[0]=> string(9) "你好。"
[1]=> string(13) "你好吗? "
[2]=> string(72) "我是程序员,不太懂这个我问题,希望大家能够帮忙!"
[3]=> string(18) "一起加油吧!"
}

关于php - unicode 模式下的 preg_split : delim_capture not working?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9114166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com