【发布时间】:2016-01-05 22:30:05
【问题描述】:
这似乎是一个基本的东西,但我无法理解它。
字符串:The
为什么正则表达式 [a-z]+ 匹配 he 但正则表达式 [a-z]* 根本不匹配任何内容?我看到它的方式是因为量词* 匹配零次或多次,它应该与前面示例中的+ 相同,即he。为什么量词+ 能够处理大写“T”之后的字符串,而量词* 却不能?
编辑: 关于正则表达式工具,我只是使用了以下在线资源: http://regexr.com/ 和 https://regex101.com/
【问题讨论】:
-
我的猜测:
[a-z]*有两个匹配项:T之前的空字符串,其余的是he。你只会看到第一场比赛。 -
@tobias_k 是的,你可以看到
T之前的空匹配(用竖线表示)here。 -
在 Java 中,使用
while和matcher.find()来获取所有匹配项。经验法则是避免使用可能匹配空字符串的未锚定模式。 -
顺便说一句——
[a-z]是不好的做法;改用[[:lower:]];您在非英语地区的用户(前者可能有问题)会感谢您。
标签: regex