Соответствующее количество вхождений, пропускающих символы - PullRequest
0 голосов
/ 08 октября 2018

Я пытался сопоставить шаблон с тремя y, граничащими с числом с обеих сторон:

1yyy5

с приведенным выше примером, это работает:

\d{1}y{3}\d{1}

Сейчасесли я добавлю дополнительный символ между одним из y, произойдет сбой:

1yyay5

Как я могу использовать {} (или что-то еще?), чтобы соответствоватьвхождения между отдельными цифрами, даже если они не в последовательном порядке?Между двумя числами может быть бесконечное количество символов, при условии, что существует ровно три y между

Желаемый результат:

 1yyy5 //should match because three y between 2 numbers  

 1yyaaay5 // should match because there are three y between two numbers 

 3..!y3777 // would fail, only one y

 ..@#9naymnymmmyptjr8 // pass, there are exactly 3 y between 9 and 8

 1yyyy2  /fail, 1 to many y. must be exactly 3 

1 Ответ

0 голосов
/ 08 октября 2018

Этот выполняет работу:

\d(?:[^y\d]*y){3}[^y\d]*\d

Объяснение:

\d          # a digit.
(?:         # start non capture group.
  [^y\d]*   # 0 or more non y or digit.
  y         # 1 y.
){3}        # end group, must appear 3 times.
[^y\d]*     # 0 or more non y or digit.
\d          # a digit.
...