[英]Pattern.compile(“(.*?):”)
我试图理解以下代码:
Pattern.compile("(.*?):")
我已经对它的含义进行了一些研究 ,但我不太了解:
根据Java文档,*表示0次或多次,而? 意味着一次或根本没有。
另外,“:”是什么意思?
谢谢
这称为勉强量词 。 星号和问号*?
在一起意味着“零次或多次,没有匹配来自输入的更多字符”。 这是防止点的原因.
输入中匹配后续冒号:
表达式。
匹配相同序列的更好表达式是[^:]*:
:,因为它可以避免回溯。 这是一篇文章链接,解释原因 。
?
在贪婪的运算符之后,例如+
或*
将使运算符变为非贪婪。 没有?
,则该正则表达式将始终匹配其找到的所有字符,包括:
。
正因为如此,正则表达式匹配的半冒号之前恰好任意字符串( :
)。 在这种情况下,分号不是特殊字符。 分号之前的内容将被放入一个组中,以后可以通过Matcher
对象进行访问。
该代码段有望使事情变得更加清晰:
String str = "Hello: This is a Test:";
Pattern p1 = Pattern.compile("(.*?):");
Pattern p2 = Pattern.compile("(.*):");
Matcher m1 = p1.matcher(str);
if (m1.find())
{
System.out.println(m1.group(1));
}
Matcher m2 = p2.matcher(str);
if (m2.find())
{
System.out.println(m2.group(1));
}
产量:
你好
您好:这是一个测试
这个正则表达式表示anthing ending with :
或者可以理解为anthing till first :
。
这里的“:”没有任何意义。 但它符合模式anystring:
将匹配此模式
我觉得 '?' 是多余的,将应用于“。*”。
':'在正则表达式中没有任何特殊含义,并且将与字符串中的字符匹配。
编辑:dasblinkenlight是正确的,如果贪婪,正则表达式将尝试尽可能匹配,并且他的建议也正确。
我找到了一个列出贪婪与勉强的链接: “贪心”和“勉强”正则表达式量词有什么区别?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.