多个字符实例的正则表达式

时间:2015-12-22 21:59:56

标签: java regex string

在Java中,使用正则表达式,我如何检查字符串以查看它是否具有正确数量的字符实例。

例如,取字符串hello.world.hello:world:。如何检查此字符串以查看它是否包含.的两个实例或:的两个实例?

我试过了

Pattern p = Pattern.compile("[:]{2}");
Matcher m = p.matcher(hello.world.hello:world:);
m.find();

但失败了。

修改

首先,我要感谢所有答案。我注意到很多答案都说了"这意味着:zero or more non-colons, followed by a single colon, followed by zero or more non-colons - matched exactly twice"。因此,如果您在:这样的字符串中检查3 Hello::World:,您会怎么做?

3 个答案:

答案 0 :(得分:3)

好吧,使用matches你可以使用:

"([^:]*:[^:]*){2}"

这意味着:"零个或多个非冒号,后跟一个冒号,后跟零个或多个非冒号 - 恰好匹配两次"。

使用find并不是很好,因为可能还有其他:,它会忽略它们。

答案 1 :(得分:1)

您可以根据两个前瞻断言使用此正则表达式:

^(?=(?:[^.]*\.){2}[^.]*$)(?=(?:[^:]*:){2}[^:]*$)

(?=(?:[^.]*\.){2}[^.]*$)确保正好有2个DOTS和(?=(?:[^:]*:){2}[^:]*$)断言输入字符串中只有2个冒号。

RegEx Demo

答案 2 :(得分:1)

您可以通过尝试将该字符串与此表单的模式匹配来确定该字符串是否具有某个特定字符的给定数字(例如':'):

^(?:[^:]*[:]){2}[^:]*$

这恰好说明了两个非捕获组,其中包含除':'之外的任何数字(包括零)字符后跟一个冒号,第二组后跟除{{1}之外的任意数量的其他字符}。