Regex захватывает все совпадения между каждым набором разделителей - PullRequest
1 голос
/ 14 февраля 2020

Мне нужно найти все совпадения в строке, которые существуют между набором разделителей.

Например, если у меня есть строка The #quick# brown fox #jumped# over the lazy #dog#., мне нужно получить совпадения quick, jumped и dog.

Я должен получать только совпадения, которые: - не содержат разделитель / (например, quick против #quick#). - находятся между наборами разделителей. То есть разделители 1 и 2 являются множеством, как и разделители 3 и 4. В итоге я должен получить quick, но не brown fox.

Вот регулярное выражение, которое я имею до сих пор: (?<=\#)(.*?)(?=\#). Это соответствует моим первым критериям, но не моему второму.

Вот на regex101.com: https://regex101.com/r/bD5mo0/1/

Итак, мой вопрос, как мне получить регулярное выражение игнорировать совпадения между множествами? То есть совпадение между первым и вторым разделителем, но не между вторым и третьим.

Я знаю, что изменение второго разделителя, чтобы отличаться от первого, решит эту проблему, но строки, которые я регулярное выражение выходят из базы данных, поэтому я бы не стал их изменять.

1 Ответ

1 голос
/ 15 февраля 2020

Если вы хотите захватить строку между парой # с, то лучше использовать это регулярное выражение с группой захвата:

/#([^#]*)#/

Обновленная демонстрация RegEx

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

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