【问题标题】:How to make preg_match to find whole word but not separate hyphen-words?如何使 preg_match 找到整个单词而不是单独的连字符?
【发布时间】:2011-08-12 11:50:08
【问题描述】:
if (preg_match('#\b'.$rawword.'\b#i',$body)) {   

此代码查找整个单词,但如果它们是像“ABLE-BODIED”这样的连字符,它将分别查找 ABLE 和 BODIED。如何修改表达式以适应破折号?

【问题讨论】:

    标签: php regex preg-match text-parsing hyphen


    【解决方案1】:

    您可以使用lookbehind 和lookahead 运算符。此运算符在后面和后面查找,但不匹配。

    例如,使用\b(?<!-)xyz(?!-)\b 查找xyz 之前或之后没有- 的整个单词。

    【讨论】:

    • 看在大家的份上,(?
    • @user723220 这些分别是lookbehind 和lookahead 断言,累计称为lookaround assertions。它们检测一个模式是否存在于字符串之前或之后,而不实际匹配任何内容。 (它们是“零宽度”,因此称为“断言”。)
    • 嗯,这似乎已经杀死了我的 preg_match
    • if (preg_match('#\b(?
    • @user723220 在'#\b(?<!-)$rawword(?!-)\b#i' 中,您现在尝试在单引号字符串中使用变量替换,但这是行不通的。像以前一样追加或使用双引号。 PHP string ref
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2013-09-22
    • 2023-03-24
    • 2019-06-17
    • 2019-11-05
    相关资源
    最近更新 更多