RegEx从标点符号中删除空格后,如何解决连接词的问题?

时间:2019-06-15 11:58:53

标签: php regex punctuation

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

我试图更改RegEx代码,但结果恰好是我想要的,即使我试图在‍‍ regex101.com等在线测试网站上测试RegEx。结果在那里还可以,并且单词不会连接在一起,但是在我的代码中,结果是不同的。我什至尝试过使用不同样式的不同RegEx代码,但是在我的代码中,仍有一些单词结合在一起。 顺便说一句,字符串的语言为 Farsi 。但是该方法对两种方法都适用。

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

反正

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

change to

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

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

答案 1 :(得分:0)

您只需要替换两次即可。 首先将正则表达式“ [[] [] *”替换为(,第二次将其替换为“ [] * []]””替换为