Как сопоставить строку с регулярным выражением, где конкретный символ появляется хотя бы один раз, чтобы первые соседние символы отличались от него? - PullRequest
1 голос
/ 16 апреля 2019

Я ищу самое короткое регулярное выражение, которое может соответствовать строке, описанной в вопросе. Меня также интересует решение, в котором регулярное выражение совпадает со строкой, в которой конкретный символ никогда не появляется окруженным тем же символом.

В настоящее время это мое решение (в данном случае конкретный символ g ):

^.*[^g]{1}g[^g]{1}.*$|^g[^g]{1}.*$|^.*[^g]{1}g$|^g$

Я ожидаю, что регулярное выражение соответствует строкам, таким как: aaagaa, g, gdddg, agaagga, ggaaga , но не соответствует: aaagg, ggaagg, gg, ggg.

1 Ответ

3 голосов
/ 16 апреля 2019

Вы можете использовать это регулярное выражение для сопоставления хотя бы одного g без смежных g:

(?<!g)g(?!g)

RegEx Demo

RegExДетали:

  • (?<!g): подтвердить, что предыдущая буква не g
  • g: соответствует букве g
  • (?!g): утверждать, что следующая буква не g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...