Regex найти слово в строке

В общих чертах я хочу найти в строке некоторую подстроку, но только если он там содержится.

У меня было выражение:

^.*(\bpass\b)?.*$

И тестовая строка:

high pass h3 

Когда я проверяю строку с помощью выражения, я вижу, что вся строка найдена (но группа «не проходит»):

match : true
groups count : 1  
group : high pass h3 

Но что мне нужно, это то, что матч имеет 2 группы: 1: фильтр высоких частот h3 2: pass

И когда я тестирую, например, строку - high h3, у меня все еще была найдена 1 группа - high h3

Как я могу это сделать?

30
задан Mat 19 February 2012 в 10:13
поделиться

1 ответ

Точка соответствует только одному символу, поэтому вы

^.(\bpass\b)?.$

совпадают:

  • Начало ввода
  • Один символ
  • Опционально
    • Граница слова
    • «пройти»
    • Граница слова
  • Одиночный символ
  • Конец ввода

, который я совсем не ожидал бы сопоставить с «high pass h3».

Регулярное выражение:

pass

(без метасимволов) будет соответствовать любой строке, содержащей «pass» (но тогда и функция «найти строку в строке», и это, вероятно, будет быстрее без сложности регулярного выражения).

3
ответ дан 27 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: