2013-07-05 95 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] –