2010-12-15 2 views
0

Я пытаюсь проанализировать строку с регулярными выражениями (.NET) и найти все пользовательские токены, начиная с [[ и заканчивая ]]. Моя первая попытка состояла в том, чтобы использовать \[\[(.*)\]\]. Казалось, что это работает, когда в строке есть только один токен. Но если их было несколько, он просто возвращает один результат от первого [[ до последнего ]].Регулярное выражение для исключения подстроки

Моя мысль состоит в том, чтобы исключить ]] из совпадающих символов, но мне еще предстоит найти способ получить эту работу. Я попытался использовать набор исключений (?! \]\]) и играл с различным синтаксисом, но не могу найти ничего, что действительно работает.

Кто-нибудь знает простой способ сделать это?

ответ

2

Регулярные выражения жадные по умолчанию, то есть они потребляют как можно больше символов. Чтобы избежать этого, поставьте «?» после «. *», т. е. попробуйте \[\[(.*?)\]\].

+0

Perfect. Именно то, что мне нужно. Я забыл о жадной концепции регулярного выражения, так как я не слишком сильно его использую. – jwynveen 2010-12-15 15:16:19

+0

Конечно, вам нужно избежать этих квадратных квадратных скобок. OP сделал, но они не отображались, пока я не добавил форматирование кода. – 2010-12-15 16:30:14

0

Это еще проще, попробуйте использовать .*? (последнее означает, что это неровное совпадение, то есть он будет захватывать минимальный минимум при попадании информации).

Для справки, пожалуйста, проверьте this site on regex. Это даст вам более подробную информацию о жадности и неприязни.

0

. * Является «жадным» совпадением и подходит к последнему совпадению ваших скобок.

*? определяет первое совпадение, которое потребляет как можно меньше повторов (что эквивалентно ленивому *)