【问题标题】:PHP Regex display either abc or abc xyz formatPHP Regex 显示 abc 或 abc xyz 格式
【发布时间】:2016-08-09 03:42:17
【问题描述】:

我正在尝试为表达式构建正则表达式,以获取 Boost Mobile 或 BoostMobile 存在的值。

有什么建议吗?

【问题讨论】:

  • 顺序很重要Boost\b匹配第一。 \W*((?i)Boost\s*Mobile\b(?-i)|(?i)Boost\b(?-i)\s*)\W* 会工作。无论如何,下面有一个更好的答案。

标签: php regex


【解决方案1】:

在 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)? - 一个可选组,匹配 1 个或 0 个序列
    • \s* - 0+ 个空格
    • Mobile - 文字子串
  • \b - 词尾边界

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多