我正在使用Embarcadero的C++ Builder開發拼寫檢查應用程序。我使用正則表達式將文本分成單個單詞。下面的代碼在RAD Studio XE上運行良好,但是與RAD Studio Seattle沒有相同的行爲。使用RegEx在Embarcadero的C++ Builder中將文本拆分爲單個單詞
當單詞包含非拉丁字符(如德語變音符號Ä,Ö,Ü)或帶有重音符號(é,ê,à)的字符時,會出現此問題。 「\ w」被解釋爲[a-zA-Z_0-9]忽略非拉丁字符。
首先,我的語境中的單詞是什麼? 可能的話包括:
「\ r \ n」 個
「字字字字...」
「字。」或 「字處理」
詞語與apostrophs: 「 '」 「一詞wor'd」, 「字」'
「字」
有兩種不同類型的撇號:'和「
下面的代碼:
String text (L"Österreich l'année);
const String sRegex (L"\r\n|(\\w+\\-)+\\w+|\\w+(\\.|\\-)|('|’)?\\w+('|’)?\\w*");
TRegEx regex(sRegex, TRegExOptions());
TMatchCollection regexMatches = regex.Matches(text);
for (int i=0; i<regexMatches.Count; ++i)
{
TMatch regexMatch = regexMatches.Item[i];
String word (regexMatch.Value);
//do stuff with word
}
所需字符串單詞的值是「Österreich」和「l'année」。但是,RegEx匹配的是「sterreich」,「l'ann」和「e」。
我的問題是,如何指定所有非拉丁字符?
不知道你是否支持它,但也許你可以從'[\ p {L}'] *'工作。 [請參閱regex101](https://regex101.com/r/jU0rV7/1)。 – ClasG
進行小測試:如果您的正則表達式爲PCRE,請在模式開頭添加'(* UTF)(* UCP)'。如果這不起作用,您可能會處理JS ECMAScript 5正則表達式,它不支持Unicode。 –
謝謝,使用\ p {L}而不是\ w工作! –