正则表达式将单词边界与引号匹配

时间:2018-12-17 12:27:10

标签: php regex

我正在尝试在单词边界内匹配一个字符串。

preg_match('/\bTORUK Cirque du Soleil\b/ims',
           'Show: TORUK Cirque du Soleil with Lady Gaga', $matches);

Output: TORUK Cirque du Soleil

这很完美。但是,当字符串中包含引号时,它将无法正常工作。例如,

preg_match('/\bTORUK "Cirque du Soleil"\b/ims',
           'Show: TORUK "Cirque du Soleil" with Lady Gaga', $matches);

完全不匹配。在这种情况下,预期输出为TORUK "Cirque du Soleil"

尝试使用\B即非单词边界,但会在没有引号的字符串中中断。

已经创建了fiddle here

2 个答案:

答案 0 :(得分:0)

首先,如@misorude所指出的,您需要指定适当的定界符,例如/。其次,您可以指定匹配单词边界或引号-类似于以下内容:

preg_match('/\bTORUK "?Cirque du Soleil("|\b)/',
           'Show: "TORUK Cirque du Soleil with Lady Gaga"', $matches);

请注意,这涉及您提供的特定示例,您可能需要相应地调整代码。

答案 1 :(得分:0)

您不需要(也不应该使用)\b
你有一句话而不是一句话。

preg_match('/TORUK "Cirque du Soleil"/ims',
       'Show: TORUK "Cirque du Soleil" with Lady Gaga', $matches);
var_dump($matches);

输出:

array(1) {
  [0]=>
  string(24) "TORUK "Cirque du Soleil""
}

回答您的评论。
仅在第一个和最后一个单词上使用单词边界:

preg_match('/\bTORUK\b "Cirque du \bSoleil\b"/ims',
       'showTORUK "Cirque du Soleil" with Lady Gaga', $matches);
var_dump($matches);

https://3v4l.org/bIW4i