Есть ли реальная польза от неохотного '?' в регулярных выражениях? - PullRequest
3 голосов
/ 29 мая 2009

Неохотные квантификаторы могут быть очень полезны. Однако я не могу думать о каком-либо использовании ??, неохотной версии ?. Может кто-нибудь привести мне пример, или это просто потому, что другие квантификаторы тоже имеют версии с неохотой?

Ответы [ 3 ]

3 голосов
/ 29 мая 2009

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

(?:\w+-??|-\w+)

Соответствует каждому слову, за которым следует дефис или перед ним стоит дефис. В foo-bar это будет соответствовать foo и -bar, а не foo- и bar, как (?:\w+-?|-\w+).

1 голос
/ 29 мая 2009

Один пример - это может быть не очень полезно на практике, но может дать вам представление о том, как его можно использовать (извините, синтаксис c #):

Match username = Regex.Match(input, @"^([\w\W]*?)(@[\w\W]+\.[\w\W])??$");

Теперь, что это будет делать, это то, что пользователь вводит свое имя пользователя или адрес электронной почты в форму ввода, и, если адрес электронной почты был введен, регулярное выражение захватывает только часть перед @. Таким образом, можно использовать несколько типов ввода, и вы по-прежнему получаете одни и те же данные независимо от того, был ли введен @domain.com или нет.

Отказ от ответственности: это , а не регулярное выражение, которое я бы использовал как есть для указанной цели - оно соответствует слишком многим адресам, не относящимся к электронной почте. Но эй, это демо ...;)

0 голосов
/ 29 мая 2009

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

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