代码之家  ›  专栏  ›  技术社区  ›  Abid Ali

Regex表示带小括号的精确单词在PHP中不起作用

  •  0
  • Abid Ali  · 技术社区  · 3 年前
    $string = 'Wow ABC (R+R) : Weldone boy (My Love)';
    $variable = "ABC (R+R)"; // this will be dynamic, could be BC (R+R) so I must use \b as boundary in pattern
    $pattern = "/\b$variable\b/i";
    
    echo preg_match($pattern, $string)? 'matched' : 'not matched';
    

    这不匹配。甚至我也尝试过图案 "/\bABC \(R\+R\)\b/i" 并且它仍然不匹配。

    Here 是我测试的链接。

    0 回复  |  直到 3 年前
        1
  •  3
  •   The fourth bird    3 年前

    模式应该转义加号,最后一个单词的边界应该是空白边界

    \bABC \(R\+R\)(?!\S)
    

    请参阅 php demo

        2
  •  1
  •   Abid Ali    3 年前

    代表“ 第四只鸟 “答案,下面是完整的示例:

    $string = 'wow Brands - Love Joy. (R+R) : Weldone boy (My Love)';
    $variable = "Brands - Love Joy. (R+R)";
    
    $pattern = "/\b".preg_quote($variable, "/")."(?!\S)/";
    $pattern = "/\b\Q$variable\E(\s|$)/";  // this also works (my solution)
    
    echo preg_match($pattern, $string)? 'matched' : 'not matched';
    

    \Q和\E 也习惯于不特别对待其中的字符。这不能转义正斜杠(/)。

    预引号 使您的字符串regex准备就绪(转义特殊字符),在这里我们还可以使用第二个参数preg_quote转义正斜杠(/)。