首页 > 解决方案 > RegEx从标点符号中删除空格后,如何解决连接词问题?

问题描述

我的 RegEx 代码删除了字符串内标点符号左右两侧的空格。删除这些空格后,结果还可以,但有些单词已连接在一起。

我尝试更改我的 RegEx 代码,但结果正是我想要的,即使我尝试在 ‍‍‍<a href="https://regex101.com/r/AvooIC/5" rel 等在线测试网站上测试我的 RegEx ="nofollow noreferrer">regex101.com 等。结果在那里还可以,单词不会连接在一起,但是在我的代码中,结果是不同的。我什至为此尝试了具有不同样式的不同 RegEx 代码,但在我的代码中,一些单词仍然连接在一起。顺便说一句,字符串的语言是Farsi. 但该方法对两者都适用。

$text = "سلام ، این یک متن (   است) متشکرم.";
$removePattern = "/(\s+)*([\.\!\:\)\]\}\(\[\{\?\,\;\؟\،\؛])(\s+)*/";
$replace = "$2";
$text = preg_replace($removePattern, $replace, $text);

我希望输出是
سلام،این یک متن(است)متشکرم.

但结果是这样的
سلاماین یک متنامتحانیاست (شایداینطوری) بهتر، باشه

你能看到如何连接سلاماینمتنامتحانیاست粘在一起吗?我的问题是如何解决这个问题,解决这个问题的解决方案是什么?这必须适用于具有不同波斯语内容的不同字符串。

标签: phpregexpunctuation

解决方案


您可以在 Linux 和 Windows 系统之间进行通信。他们以不同的方式处理空白字符。

反正

"/(\s+)*([\.\!\:\)\]\}\(\[\{\?\,\;\؟\،\؛])(\s+)*/";

change to

"/(\R+)*([\.\!\:\)\]\}\(\[\{\?\,\;\؟\،\؛])(\R+)*/";

无论系统如何,您都将匹配任何空白字符


推荐阅读