2013-07-05 92 views
1

我想使用RegEx删除不必要的ZWNJ,目前我在任何情况下硬编码了一些不需要ZWNJ的字符,但是如何将它扩展为所有这些字符呢?删除不必要的ZWNJ

preg_replace('#(?<=[ادذرزژوآأإءa-zA-Z])\x{u200C}#u', '', $parsi); 

当ZWNJ放置,否则将被 连接成一个连字两个字符之间,一个ZWNJ分别使它们在它们的 最终和初始形式被印刷。这也是 空格字符的效果,但是在需要将 单词靠得更近时使用ZWNJ。

如果我们需要限制问题阿拉伯文字是没有任何正则表达式元字符来表示没有中间形式(等不需要后续ZWNJ)的信吗?

+0

说真的,我们不需要每个控制字符的标签。请不要将标签放回去。 – BoltClock

+0

对于[a-zA-Z]在任何情况下都不需要ZWNJ,你有错。在德语中,复合名词的连接边界不会形成连字。例如,考虑德语单词“Schifffahrt”(由“Schiff”+“fahrt”,意为“乘船旅行”)。为了正确的排版,你需要一个ZWNJ来防止“fff”连字的形成。更多示例:“Auflage”(“Auf”+“lage”),“Brotzeit”(“Brot”+“zeit”)。 –

+0

@ R.MartinhoFernandes所以,你能说出哪些拉丁字母属于RegEx吗? – PHPst

回答

-1

作为一个非阿拉伯语的演讲者,这几乎不是我的专业领域,但... Here我发现了阿拉伯文unicode字符的一些信息。

我建议做线沿线的东西:

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

要选择所有阿拉伯字母。

+0

ZWNJ不是阿拉伯字符。其余的模式是一个红色的鲱鱼。 – BoltClock

+0

BoltClock说了些什么,再加上一个更好的正则表达式是:'\ p {Script = Arab}'。 –

+0

PSPst要求“在任何情况下不需要ZWNJ的所有角色”。我只是提出硬编码的值:[ادذرزژوآأإء]被替换为[\ u0600- \ u065F \ u066A- \ u06EF \ u06FA- \ u06FF] –