2013-03-20 74 views
5

我需要匹配Unicode字母,與PCRE的\p{L}類似。與RegExp匹配的Unicode字母

現在,由於Dart的RegExp類是基於ECMAScript的,所以它不具備\p{L}的概念,遺憾的是。

我正在研究可能構建一個匹配所有Unicode字母的大字符類,但我不確定從哪裏開始。

所以,我想像匹配字母:

foobar 
מכון ראות 

但將R符號不應該匹配:

BlackBerry® 

也不應該任何ASCII控制字符或標點符號等。基本上每個Unicode支持的每個語言中的每個字母,無論是å,ä,φ還是¬,如果它們是實際的字母,它們應該匹配。

回答

2

看起來你將不得不迭代字符串中的符文,然後根據unicode範圍表檢查整數值。

Golang有一些代碼可以直接從unicode source生成這些表格。請參閱maketables.go以及golang unicode軟件包中的其他一些文件。

還是拿懶選項,並提交飛鏢錯誤,並等待鏢隊實現它;)

2

我不認爲有關的Unicode字符字母或非字母分類完成信息是在Dart圖書館的任何地方。你可能可以把一些東西放在一起,主要是在Intl庫中使用東西,特別是Bidi。我在想,例如,

isLetter(oneCharacterString)=> Bidi.endsWithLtr(oneLetterString)|| Bidi.endsWithRTL(oneLetterString);

可能會做一個合理的工作。至少它似乎有許多有效字符的範圍。或者,您可以根據_LTR_CHARS和_RTL_CHARS中的信息組合您自己的RegExp。它明確表示它不是100%準確的,但對於大多數實際目的來說都很好。

2

在Dart或JS中沒有這方面的支持。

Xregexp JS庫支持生成相當大的字符類正則表達式來支持這樣的事情。您可能能夠生成正則表達式,將其打印並剪切並粘貼到您的應用程序中。