2016-08-02 65 views
1

我正在尝试构建表达式的正则表达式,以获取Boost Mobile或BoostMobile(取决于此值)的值。PHP正则表达式显示abc或abc xyz格式

有什么建议吗?

+0

顺序事项'升压\ B'首先匹配。 '\ W *((?i)Boost \ s * Mobile \ b(?-i)|(?i)Boost \ b(?-i)\ s *)\ W *'会起作用。无论如何,有一个更好的答案。 – chris85

回答

3

在NFA正则表达式中,在未锚定的交替组中,匹配的第一个分支停止了组处理,位于右侧的其他分支未针对该字符串进行检查。你可以在Alternation with The Vertical Bar or Pipe Symbol上阅读更多内容。

因此,交换价值和简化的模式,你可以使用

/\b(Boost \s*Mobile|Boost)\b/i 

然而,这里的最有效的方法就是通过使用可选的组:

/\bBoost(?:\s*Mobile)?\b/i 
     ^^   ^^ 

regex demo

i不区分大小写修饰符在整个正则表达式上设置。您无需在模式的开始/结束时将其打开和关闭。此外,\W*可以匹配一个空字符串,因此当您使用\b时,您检查字边界的方式可能会失败。

图案的详细资料

  • \b - 领先字边界
  • Boost - 文字串
  • (?:\s*Mobile)? - 0 - 匹配的
    • \s* 1组或0的序列的可选组+空格
    • Mobile - 文字串
  • \b - 尾字边界
+0

非常感谢!这两个解决方案都有效 – user6622569

相关问题