繁体   English   中英

Pattern.compile(“(。*?):”)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM