Regex: сопоставить начальные / закрывающие символы с пробелами - PullRequest
1 голос
/ 18 марта 2010

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

^(\[\[)[a-zA-Z.-_]+(\]\])

Который будет соответствовать строке, такой как "[[word1]]", и вернуть мне все совпадения, если их больше одного. Проблема в том, что я хочу, чтобы он подбирал совпадения там, где может быть пробел, так что пример "[[word1 word2]]", теперь это будет работать, если я добавлю пробел в мой шаблон выше, однако это вызывает проблему, что он получит только одно совпадение для всей моей строки, например, если у меня есть строка

"Hi [[Title]] [[Name]] [[surname]], How are you"

тогда совпадение будет [[Title]] [[Name]] [[surname]], а не 3 совпадения [[Title]], [[Name]], [[surname]]. Я уверен, что в Regex я на расстоянии одного или двух символов, но я застрял, как мне заставить его вернуть 3 матча.

Спасибо

Ответы [ 3 ]

4 голосов
/ 18 марта 2010

Вам просто нужно сделать регулярное выражение нежадным , используя ?, например:

^(\[\[)[a-zA-Z.-_ ]+?(\]\])

Также в вашем регулярном выражении есть ошибка. Вы включили - в класс char, считая его буквальным дефисом. Но - в классе char является мета-символом. Таким образом, он будет эффективно соответствовать всем символам от . (точка) до _ (подчеркивание). Так что вам нужно избежать этого как:

^(\[\[)[a-zA-Z.\-_ ]+?(\]\])

или вы можете поместить его в какое-то другое место в регулярном выражении, чтобы в нем не было вещей с обеих сторон:

^(\[\[)[a-zA-Z._ -]+?(\]\])

или

^(\[\[)[-a-zA-Z._ ]+?(\]\])
1 голос
/ 18 марта 2010

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

Другой подход заключается в использовании [^\]] в качестве ваших персонажей вместо [a-zA-Z.-_]. Таким образом, совпадение никогда не превысит ваши закрывающие скобки.

1 голос
/ 18 марта 2010

Вам нужно отключить жадные совпадения. Смотрите эти примеры для разных языков:

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