【问题标题】:Regular expression - PCRE (PHP) - word boundary (\b) and accent characters正则表达式 - PCRE (PHP) - 单词边界 (\b) 和重音字符
【发布时间】:2014-03-30 21:26:28
【问题描述】:

为什么字母 é 在以下示例中算作与 \b 匹配的单词边界?

模式:/\b(cum)\b/i

文字:écumé

匹配不想要的“cum”。

有没有可能克服这个问题?

【问题讨论】:

    标签: php regex utf-8 pcre non-ascii-characters


    【解决方案1】:

    当您将 u 修饰符添加到您的正则表达式时,它会起作用

    /\b(cum)\b/iu
    

    【讨论】:

    • 谢谢!傻我,应该多研究一下修饰符。
    • 添加 Unicode 修饰符使正则表达式将输入字符串视为 Unicode。 PS:被低估的问题和解决方案。
    【解决方案2】:

    要处理 unicode,请将 \b 替换为

    /(?<=^|\PL)(cum)(?=\PL|$)/i
    

    【讨论】:

    • 谢谢,但这似乎太复杂了。 stema 的回答更直接地解决了这个问题,因为问题是文本具有 unicode 字符,但模式没有意识到这一点。
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2021-06-18
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多