Понимание чего-либо в регулярных выражениях - PullRequest
4 голосов
/ 11 февраля 2012

Если я использую разделитель для строки:

Scanner scanString = new Scanner(line).useDelimiter("<.*>");

Я хочу знать, почему это не сохранит текст в

<a href="https://post.craigslist.org/c/snj?lang=en">post to classifieds</a>

, но будет в строке столько

<option value="ccc">community

Хотя

Scanner scanString = new Scanner(line).useDelimiter("<.*?>");

будет работать для обоих.

Насколько я понимаю, это "<.*>" должно исключать строку, начинающуюся с "<", за которой следуетлюбой символ 0 или более раз, пока он не достигнет ">".Так почему бы не начать исключать снова, пока не достигнет другого "<"?</p>

1 Ответ

3 голосов
/ 11 февраля 2012

Это связано с тем, что во втором выражении используется квантификатор неохотно (в отличие от жадный ), что означает, что оно не пытается сопоставить всю строку и отступить оттуда как первый.

Это выражение "<.*>" пытается продвинуться как можно дальше во входную строку, чтобы оно дошло до конца. Как только он там, он обнаруживает, что у него есть матч, и поэтому он останавливается. Неохотная версия "<.*?>" этого не делает: она совпадает с первой > и останавливается.

В этой статье подробно рассматриваются квантификаторы.

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