Regex - соответствует любому символу, кроме символа - PullRequest
0 голосов
/ 25 октября 2019

Моя цель - сопоставить каждую группу, начиная с __ и заканчивая __.

Например, в этом тексте:

__1__
__2____3__
__4_4__

Мы можем найти 4 группы.

С этим регулярным выражением

__.[^__]*__ 

последняя группа не совпадает.

С этим

__(?!(^_)$).*__ 

2-я и 3-я группы объединены в одну.

Какое решение, пожалуйста?

1 Ответ

1 голос
/ 25 октября 2019

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

__.+?__

Вы можете быть удивлены тем, что я ничего не сказал о "не подбирайте подчеркивания по пути", поскольку во всех ваших попытках вы пытались что-то подобное.

Хитрость в том, чтобы использовать +?, ленивый квантификатор. Я позволяю регулярному выражению соответствовать любому символу (.), но как можно меньшее число раз , так что после него есть два подчеркивания. Как будто после сопоставления каждого символа движок регулярных выражений всегда спрашивает «есть ли два подчеркивания впереди?». И если они есть, вот где квантификатор перестает совпадать.

См. this для получения дополнительной информации о ленивых и жадных квантификаторах.

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