【问题标题】:PHP preg_match to find whole wordsPHP preg_match 查找整个单词
【发布时间】:2011-01-18 08:41:14
【问题描述】:

我对正则表达式很陌生。你能帮我创建一个匹配整个单词的模式,包含特定部分吗?例如,如果我有一个文本字符串“执行正则表达式匹配”,并且如果我搜索 express,那么如果我搜索 ,它应该给我 expression form,它应该给我 Perform 等等。明白了吗?

【问题讨论】:

    标签: php preg-match


    【解决方案1】:
    preg_match('/\b(express\w+)\b/', $string, $matches); // matches expression
    preg_match('/\b(\w*form\w*)\b/', $string, $matches); // matches perform,
                                                         // formation, unformatted
    

    地点:

    • \b 是单词边界
    • \w+ 是一个或多个“单词”字符*
    • \w* 是零个或多个“单词”字符

    有关 PCRE,请参阅 escape sequences 上的手册。


    * 注意:虽然不是真正的“单词字符”,但下划线_ 也包含在字符类\w 中。

    【讨论】:

    • 太好了。正是我想要的...+1
    • \b 单词边界,很好...为什么我直到现在才看到?有用。
    • 小心,因为“+”在 PHP 正则表达式中被视为单词边界!
    • @Nadir 需要详细说明吗?在正则表达式中+“一个或多个字符”。在外面,实际上任何不是[a-z] 的东西都被认为是单词边界。但是我为什么要小心呢?我不明白上下文。
    • 这里有更多详细信息:我遇到的问题是以下代码:preg_match_all("/#(\\w+)/", "#a2+u2lis", $hashtags); - 我需要解决 \w 将“+”视为单词边界的事实:您最终得到 2 个单词,而我只想要结果中的“a2+u2lis”(上下文:它是 PHP 5.3)
    【解决方案2】:

    这匹配“执行”:

    \b(\w*form\w*)\b
    

    这匹配“表达式”:

    \b(\w*express\w*)\b
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多