Я пытаюсь создать регулярное выражение для выражения, чтобы получить значения для Boost Mobile или BoostMobile в зависимости от того, что присутствует.PHP Regex отображает либо abc, либо abc xyz format
Любые предложения, пожалуйста?
Я пытаюсь создать регулярное выражение для выражения, чтобы получить значения для Boost Mobile или BoostMobile в зависимости от того, что присутствует.PHP Regex отображает либо abc, либо abc xyz format
Любые предложения, пожалуйста?
В регулярных выражениях 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
- конечные границы словаБольшое вам спасибо! Оба решения работали! – user6622569
Порядок имеет значение 'подталкивания \ b' соответствует первым. '\ W * ((? I) Boost \ s * Mobile \ b (? - i) | (? I) Boost \ b (? - i) \ s *) \ W *' будет работать. Получите лучший ответ ниже. – chris85