Java Pattern.compile(";(.*):";)
我试图理解以下代码:Java Pattern.compile(";(.*):";),java,regex,Java,Regex,我试图理解以下代码: Pattern.compile("(.*?):") 我已经做了一些关于它可能意味着什么, 但我不太明白: 根据java文档,*表示0次或更多次, 虽然意思是一次或根本不 还有,“:”是什么意思 谢谢贪婪操作符之后的?,例如+或*将使操作符不贪婪。如果没有?,该正则表达式将继续匹配它找到的所有字符,包括: 实际上,正则表达式将匹配分号之前发生的任何字符串(:)。在本例中,分号不是特殊字符。分号之前的内容将被放入一个组中,稍后可以通过匹配器对象访问该组 这段代码片段有望让事情
Pattern.compile("(.*?):")
我已经做了一些关于它可能意味着什么,
但我不太明白:
根据java文档,*表示0次或更多次,
虽然意思是一次或根本不
还有,“:”是什么意思
谢谢贪婪操作符之后的
?
,例如+
或*
将使操作符不贪婪。如果没有?
,该正则表达式将继续匹配它找到的所有字符,包括:
实际上,正则表达式将匹配分号之前发生的任何字符串(:
)。在本例中,分号不是特殊字符。分号之前的内容将被放入一个组中,稍后可以通过匹配器
对象访问该组
这段代码片段有望让事情变得更清楚:
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));
}
收益率:
你好
你好:这是一个测试
贪婪运算符后的
?
,如+
或*
将使运算符非贪婪。如果没有?
,该正则表达式将继续匹配它找到的所有字符,包括:
实际上,正则表达式将匹配分号之前发生的任何字符串(:
)。在本例中,分号不是特殊字符。分号之前的内容将被放入一个组中,稍后可以通过匹配器
对象访问该组
这段代码片段有望让事情变得更清楚:
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));
}
收益率:
你好
你好:这是一个测试
这被称为不情愿的量词。星号和问号*?
一起表示“零次或多次,不匹配输入中超出需要的字符”。这就是防止点
表达式与输入中的后续冒号:
匹配的原因
匹配相同序列的更好的表达式是[^::]*:
,因为它可以避免回溯。这是一个。这被称为不情愿的量词。星号和问号*?
一起表示“零次或多次,不匹配输入中超出需要的字符”。这就是防止点
表达式与输入中的后续冒号:
匹配的原因
匹配相同序列的更好的表达式是
[^::]*:
,因为它可以避免回溯。这是一个。我认为“?”是多余的,将应用于“*”
“:”在regexps中没有任何特殊意义,将与字符串中的字符匹配
编辑:dasblinkenlight是正确的,如果贪婪的话,regexp会尽可能地匹配,他的建议也是正确的
我发现了一个列出贪婪与勉强的链接:我认为“?”是多余的,将应用于“*” “:”在regexps中没有任何特殊意义,将与字符串中的字符匹配 编辑:dasblinkenlight是正确的,如果贪婪的话,regexp会尽可能地匹配,他的建议也是正确的
我发现了一个链接,其中列出了贪婪和勉强:这个正则表达式的意思是
以:
结尾的anthing,或者可以理解为anthing直到第一个:
这里的“:”没有任何意义。但是它符合模式
anystring:
将匹配此模式此正则表达式表示以“
结尾的anthing,或者可以理解为anthing直到第一个:
这里的“:”没有任何意义。但它符合模式
anystring:
将与此模式匹配签出。@KendallFrey:不错,但在Java中
相当于[^\n\r\u0085\u2028\u2029]
。签出。@KendallFrey:不错,但在Java中
相当于[^\n\r\u0085\u2028\u2029]
。这个词是量词,不是限定词:它指定一个数量。事实上,你可以说?
限定了量词<代码>*通常是贪婪的,但?
会“削弱”它,使它不情愿或不贪婪。@Alanmore你说得对,它是量词。我编辑了答案来解决这个问题。这个词是量词,而不是限定词:它指定了一个数量。事实上,你可以说?
限定了量词<代码>*通常是贪婪的,但?
会“削弱”它,使它不情愿或不贪婪。@Alanmore你说得对,它是量词。我编辑了答案来解决这个问题。