【发布时间】:2016-08-09 03:42:17
【问题描述】:
我正在尝试为表达式构建正则表达式,以获取 Boost Mobile 或 BoostMobile 存在的值。
有什么建议吗?
【问题讨论】:
-
顺序很重要
Boost\b匹配第一。\W*((?i)Boost\s*Mobile\b(?-i)|(?i)Boost\b(?-i)\s*)\W*会工作。无论如何,下面有一个更好的答案。
我正在尝试为表达式构建正则表达式,以获取 Boost Mobile 或 BoostMobile 存在的值。
有什么建议吗?
【问题讨论】:
Boost\b匹配第一。 \W*((?i)Boost\s*Mobile\b(?-i)|(?i)Boost\b(?-i)\s*)\W* 会工作。无论如何,下面有一个更好的答案。
在 NFA 正则表达式中,在未锚定的交替组中,匹配的第一个分支会停止组处理,位于右侧更远的其他分支不会根据字符串进行检查。您可以在Alternation with The Vertical Bar or Pipe Symbol 阅读更多内容。
因此,交换值并简化您可以使用的模式
/\b(Boost \s*Mobile|Boost)\b/i
然而,这里最有效的方法是使用可选组:
/\bBoost(?:\s*Mobile)?\b/i
^^ ^^
i 不区分大小写修饰符设置在整个正则表达式上。您无需在模式的开始/结束时打开和关闭它。此外,\W* 可以匹配空字符串,因此当\b 有效时,您检查单词边界的方式可能会失败。
模式详情:
\b - 引导词边界Boost - 文字子字符串(?:\s*Mobile)? - 一个可选组,匹配 1 个或 0 个序列
\s* - 0+ 个空格Mobile - 文字子串\b - 词尾边界【讨论】: