Как попасть во вторую группу матчей с номером? - PullRequest
1 голос
/ 24 сентября 2019

Текст например

data=1 type=old
data=2 type=test (2)
type=test data=3 (3)

Мне нужно получить идентификатор данных из 2 и 3 строк

Мой код:

(data=([\d]+)|type=test)\s+(?!\1)((?1))

, но не получить данные= 3

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вам нужно g от глобального и m от многострочного в вашем регулярном выражении:

/(data=([\d]+)|type=test)\s+(?!\1)((?1))/gm
0 голосов
/ 24 сентября 2019

В самой простой форме вы можете использовать

^(?=.*type=test).*data=(\d+)

См. Демонстрационную версию regex

При необходимости вы можете добавить границы слова / пробела позже, например

^(?=.*\btype=test\b).*\bdata=(\d+)\b
^(?=.*(?<!\S)type=test(?!\S)).*(?<!\S)data=(\d+)(?!\S)

Точка:

  • ^ - начало строки
  • (?=.*type=test) - после любых 0+ символов должно быть type=testвозможно справа от текущей позиции
  • .* - любые 0+ символов, кроме символов разрыва строки, как можно больше
  • data= - строка
  • (\d+) - группа 1: 1+ цифр
...