【问题标题】:Delphi RegEX library and unicode charactersDelphi RegEX 库和 unicode 字符
【发布时间】:2013-01-08 05:33:34
【问题描述】:

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

\bM\b 将匹配 aaaa M bbbbbb

但如果我有

aaaaa Mädchen 

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

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

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

【问题讨论】:

标签: regex delphi


【解决方案1】:

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

【讨论】:

  • 感谢您的回答,这确实很可悲,Delphi 以 unicode 功能、国际化等为荣,而且他们有一个仅适用于美国的正则表达式引擎,PATHETIC
  • PCRE 有一个选项 PCRE_UCP,它启用了对 \B、\b、\D、\d、\S、\s、\W、\w 的 Unicode 支持 quality.embarcadero.com/browse/RSP-22372
【解决方案2】:

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

(?<![\pL\pN\pM])M(?![\pL\pN\pM])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多