Php 去除不必要的ZWNJ

Php 去除不必要的ZWNJ,php,regex,unicode,Php,Regex,Unicode,我想使用正则表达式删除不必要的ZWNJ,目前我硬编码了一些在任何情况下都不需要ZWNJ的字符,但如何将其扩展到所有此类字符 preg_replace('#(?<=[ادذرزژوآأإءa-zA-Z])\x{u200C}#u', '', $parsi); 当ZWNJ放在两个字符之间时 一个ZWNJ连接到一个系带上,使它们以自己的方式打印出来 分别为最终形式和初始形式。这也是一种影响 空格字符,但当需要保持 单词靠得更近 如果我们需要将问题限制在阿拉伯语脚本中,是否有任何正则表达式元字符

我想使用正则表达式删除不必要的ZWNJ,目前我硬编码了一些在任何情况下都不需要ZWNJ的字符,但如何将其扩展到所有此类字符

 preg_replace('#(?<=[ادذرزژوآأإءa-zA-Z])\x{u200C}#u', '', $parsi);
当ZWNJ放在两个字符之间时 一个ZWNJ连接到一个系带上,使它们以自己的方式打印出来 分别为最终形式和初始形式。这也是一种影响 空格字符,但当需要保持 单词靠得更近


如果我们需要将问题限制在阿拉伯语脚本中,是否有任何正则表达式元字符来表示没有中间形式的字母,等等,不需要后续的ZWNJ

作为一名非阿拉伯人,这几乎不是我的专业领域,但是。。。 我找到了一些关于阿拉伯unicode字符的信息

我建议采取以下行动:

 [\u0600-\u065F\u066A-\u06EF\u06FA-\u06FF]

选择所有阿拉伯字母。

说真的,我们不需要为每个控制字符都添加标签。请不要把标签放回去。你认为[a-zA-Z]在任何情况下都不需要ZWNJ是错误的。在德语中,连字不跨越复合名词的连接边界。作为一个例子,考虑德国字Schifffahrt从希夫+法尔,意思是船旅行。为了正确的排版,你需要一个ZWNJ来防止fff连字的形成。更多示例:Auflage Auf+lage,Brotzeit Brot+zeit.@R.MartinhoFernandes那么你能说出哪些拉丁字母属于正则表达式吗?ZWNJ不是阿拉伯字符。该模式的其余部分是一条红鲱鱼。BoltClock说,再加上一个更好的正则表达式应该是:\p{Script=Arab}。PSPSST要求所有在任何情况下都不需要ZWNJ的字符。我只是建议用类似[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FF]的代码替换硬编码的值:[u1575-\u584-\u1688-\1608; u1570-\u1573-]