1

如果使用\b单词边界,它似乎只理解 ASCII 字母,例如模式

\bM\b将匹配aaaa M bbbbbb

但如果我有

aaaaa Mädchen 

它也会,因为它认为ä是词尾。

是否有任何标志可以设置这个正则表达式库也接受 Unicode 字符串?这个库似乎不太可能如此原始,但它不在选项中

TRegExOption = (roNone, roIgnoreCase, roMultiLine, roExplicitCapture,
roCompiled, roSingleLine, roIgnorePatternSpace);
4

2 回答 2

3

根据regular-expressions.info,Delphi regex lib 是基于 PCRE 的,PCRE 中预定义的字符类\w仅基于 ASCII,因此\b也仅基于 ASCII。

于 2013-01-08T07:25:29.480 回答
2

您可以使用环视来创建自己的单词边界,以适应您对“单词”的首选定义。例如,如果您想将“M”匹配为一个单词并将所有 Unicode 字母、数字和标记视为单词字符,请使用:

(?<![\pL\pN\pM])M(?![\pL\pN\pM])
于 2013-07-17T13:30:24.373 回答