2015-04-14 61 views
2

我有以下的阿拉伯文字:阿拉伯語正則表達式匹配發聲

الْكَلَامُ عَلَيْهِ مِنْ وُجُوهٍ:أَحَدُهَا: أَنَّ هَذِهِ الْجُمْلَةَ وَنَظَائِرَهَا مِنْ خُطْبَةِ الْكِتَابِ مُرَبَّعَةٌ نُونِيَّةٌ. 

正如你可以看到字符發聲。據我所知,每個人聲都被認爲是一個角色。起初我在網上正則表達式測試網站嘗試了以下選項,他們都工作並返回結果,但在C#中它從來沒有工作。我試過如下:

 var t1 = Regex.Matches(txt, "/[ًٍَِْ]/g", RegexOptions.RightToLeft); 
     var t2 = Regex.Matches(txt, "/([\u064B-\u0652])/g", RegexOptions.RightToLeft); 

在T1,我試圖將自己匹配主唱(),但沒有奏效,因爲它給零個匹配。在t2中,我嘗試使用它們的Unicode表示法,但它也不起作用。

回答

6

嘗試使用

var inp1 = "الْكَلَامُ عَلَيْهِ مِنْ وُجُوهٍ:أَحَدُهَا: أَنَّ هَذِهِ الْجُمْلَةَ وَنَظَائِرَهَا مِنْ خُطْبَةِ الْكِتَابِ مُرَبَّعَةٌ نُونِيَّةٌ."; 
var t2 = Regex.Matches(inp1, "[\u064B-\u0652]", RegexOptions.RightToLeft); 

您正在使用從匹配阻止C#模式的JavaScript符號。

這裏是輸出:

enter image description here

+0

多麼愚蠢的錯誤....感謝。 – ykh

+1

我不能在我的VS2012中正確地複製't1' :(看起來有些亂七八糟......捕獲的組數很少(只有42次出現)。我會用十六進制數字。你有沒有考慮用'\ p {IsArabic }'? –

+1

@stribizhev unicode範圍內有8個字符''[u064B- \ u0652]',而顯式正則表達式只有5個字符。如果你做了一個'(?![])[\ u064B- \ u0652 ]'你會看到有13個字符被特定範圍排除,並且包含在unicode範圍內(55-42 = 13) – xanatos