Сопоставить одинаковые строки с другим предыдущим шаблоном нулевой ширины - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу найти следующие совпадения foo и bar , для которых получатель письма является username. То есть:

username:"foo",web:"foo.com",email:"foo@foo.com"

-> совпадать с foo в имени пользователя и электронной почте, а не в сети

username:"bar",web:"bar.com",email:"bar@bar.com"

-> совпадать с bar в имени пользователя и электронной почте, а не в сети

username:"vi",web:"vi.com",email:"vim@vi.com"

-> нет совпадений

Вот неудачное выражение, которое я пробовал:

\(username:"\)\@<=[^"]\+\(".*email:"\)\@<=\1@

Результаты не совпадают.
Можно ли найти эти совпадения?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

У тебя почти было это. Вам нужно было заключить скобки вокруг части имени пользователя и использовать \2 вместо \1:

\(username:"\)\@<=\([^"]\+\)\(.*email:"\2@\)\@=

Если вы просто хотите сопоставить строки, а не извлекать имя пользователя, вы можете упростить до

username:"\([^"]*\).*email:"\1@
0 голосов
/ 27 апреля 2018

В вашем примере эта строка должна помочь:

\v(web:"[^"]{-})@<!(foo|bar)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...