php – 在unicode模式下的preg_split:delim_capture不工作?
发布时间:2020-12-13 21:45:27 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用正则表达式将一大块中文文本拆分成句子.为了我的目的,句子分隔符是: 全宽完全停止.(0x3002) 全宽问号?(0xFF1F) 全宽感叹号!(0xFF01) 现在,让我们说我的$str是这样的: $str =“你好.你好吗?我是程序员,不太懂这个我问题,希望大家能够帮忙
我正在尝试使用正则表达式将一大块中文文本拆分成句子.为了我的目的,句子分隔符是:
>全宽完全停止.(0x3002) 现在,让我们说我的$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",PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY ); var_dump($arr); OUTPUT: array(4) { [0]=> string(9) "你好." [1]=> string(13) "你好吗? " [2]=> string(72) "我是程序员,希望大家能够帮忙!" [3]=> string(18) "一起加油吧!" } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |