2017-01-16 5 views
0

У меня есть следующая строка:Regex предотвращает совпадение вложенного совпадения?

"hello x { x {} } world" 

Я хочу первую пару, чтобы соответствовать, а не второй группе. Regex должен выводить следующее: «x {x {}}», но вместо этого выводит x {}, который находится внутри.

Могу ли я сделать так, чтобы регулярное выражение захватывало только родителя и никогда не было детей?

Простая проверка, например:/x {}/g не будет. Очевидно, почему, но я не уверен, какой метод можно использовать, чтобы обойти это.

+0

While возможно, вы могли бы сделать это с изменением регулярного выражения (Idunno), Я мог бы также предположить, что он исправил его, перейдя через целевую строку по-другому, постоянно отслеживая первый индекс поиска и перемещая его до конца шаблона, когда он найден. – Katana314

+0

Анализ синтаксиса, который включает в себя такие вещи, как скобки или скобки вложенности, обычно требует более сильного анализатора, чем то, что может быть достигнуто с помощью регулярных выражений. – Pointy

+0

Что должно выводиться из '' hello x {x {y {}} p {} zoo} world {again} "'? – anubhava

ответ

1

вы можете попробовать использовать следующее:

x\s*{.*} 

https://regex101.com/r/VAYwYt/1

+0

Должен ли мы использовать оператор точки или быть как можно более конкретным? Или это не важно? – Asperger

+0

Обновлен ответ @Asperger – Maslo

+0

Принято. Оба работают, но этот чище. Я бы не использовал точку, хотя бы как можно более конкретную. Но эй, это мое мнение:) – Asperger

1

Specific в строку это самый простой я мог генерировать:

x {?.+} 

Ссылка: https://regex101.com/r/aEpueW/2

+0

Выбери свой ответ:) – Asperger

+0

Почему все люди используют (.) Я подумал, что это убийца по производительности? – Asperger

+0

вы можете опустить теги с экранированием \ – Asperger

Смежные вопросы