Я нашел решения для поиска n-го вхождения, но не смог найти каждого n-го вхождения.
У меня есть такая строка, как "key1~value1~key2~value2~key3~value3~
".
Какое регулярное выражение будет соответствовать каждому второму вхождению ~
?
Ключ1 ~ значение1 ~
ключ2 ~ значение2 ~
ключ3 ~ значение3 ~
Я пытаюсь создать собственный анализатор шаблонов для Elasticsearch, так как регулярное выражение должно соответствовать разделителям токенов, а не токенам.
3 ответа
Вы можете использовать
~(?=(?:[^~]*~[^~]*~)*[^~]*$)
Шаблон соответствует:
~
- тильда, за которой следует ...(?=(?:[^~]*~[^~]*~)*[^~]*$)
- 0+ без тильд +~
x 2 раза, 0+ раз, а затем 0+ без тильд до конца строки. Таким образом, эта проверка проверяет наличие четного числа тильд до конца строки после совпадения с первой тильдой.
Первая группа неперекрывающихся вхождений ~.*?(~)
. Попробуйте: http://regexr.com/3dc15.
Вы должны убедиться, что перед этим не было четного числа ~
:
(?<!^([^~]*~[^~]*~)*[^~]*)~
Как это работает:
(?<!^([^~]*~[^~]*~)*[^~]*)~ Our regex.
~ Matches a tilde (~).
(?<! ) Assert that before it is not:
^ the beginning
( )* followed by zero or more times:
[^~]*~[^~]*~ two tildes, no matter what comes within
[^~]* followed by non-tildes.
Похожие вопросы
Связанные вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки строк, разбора и преобразования. Укажите язык (PHP, Python и т. д.) или инструмент (grep, VS Code, Google Analytics и т. д.), который вы используете. Не размещайте вопросы, требующие объяснения того, что означает символ или чему будет соответствовать конкретное регулярное выражение.