如果我在字符串上使用分隔符:
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("<.*?>");
将适用于两者。
据我了解,"<.*>"
应排除以“&lt;”开头的字符串跟随任何字符0次或更多次,直到它达到“&gt;”。所以它不应该再开始排除,直到它达到另一个“&lt;”?
答案 0 :(得分:3)
这是因为第二个表达式使用不情愿(而不是 greedy )量词,这意味着它不会尝试匹配整个字符串并从就像第一个那样。
这个表达式"<.*>"
试图尽可能地进入你的输入字符串,所以它一直到最后。一旦它在那里,它发现它有一个匹配,所以它停止。不情愿的版本"<.*?>"
不会这样做:它与第一个>
匹配,并停止。
This article提供了关于量词的精彩读物。