我正在使用Embarcadero的C ++ Builder开发一个拼写检查器应用程序。我使用正则表达式将文本拆分为单个单词。以下代码适用于RAD Studio XE,但与RAD Studio Seattle的行为方式不同。
当单词包含非拉丁字符(如德语元音(Ä,Ö,Ü))或带有重音字符(é,ê,à)的字符时,会出现问题。 “\ w”被解释为[a-zA-Z_0-9]忽略非拉丁字符。
首先,在我的背景下,一个词是什么? 可能的词包括:
“\ r \ n” 个
“word-word-word-word ...”
“字”。或“word - ”
带有叛逆者的词语:“'word”“wor'd”“word”“
“字”
有两种不同类型的撇号:'和'
以下是代码:
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
}
String字的所需值是“Österreich”和“l'année”。然而,RegEx匹配的是“sterreich”,“l'ann”和“e”。
我的问题是,如何指定所有非拉丁字符?
答案 0 :(得分:1)