正则表达式,在任何空格之前只匹配一次字符

时间:2012-12-09 16:45:22

标签: java regex

在Java中,我将使用什么正则表达式来匹配只有一个冒号的字符串,并确保冒号出现在任何空格之前?

例如,它应匹配这些字符串:

label: print "Enter input"
But: I still had the money.
ghjkdhfjkgjhalergfyujhrageyjdfghbg:
area:54

但不是

label: print "Enter input:"
There was one more thing: I still had the money.
ghfdsjhgakjsdhfkjdsagfjkhadsjkhflgadsjklfglsd
area::54

4 个答案:

答案 0 :(得分:3)

如果您将其与matches一起使用(需要匹配整个字符串),您可以使用

[^\\s:]*:[^:]*

这意味着:任意多个非whitespace,非:字符,然后是:,然后是更多任意多个非:个字符。

我真的只使用了两个正则表达式概念:(否定)character classesrepetition

如果您想在:之前或之后要求至少一个字符,请将相应的*替换为+(如评论中指出的jlordo)。

答案 1 :(得分:0)

以下内容应该有效:

^[^\s:]*:(?!.*:)

如果您的字符串可以包含换行符,请使用DOTALL标志或将正则表达式更改为以下内容:

(?s)^[^\s:]*:(?!.*:)

答案 2 :(得分:0)

这取决于我们所说的空白区域,它可能是

[^\\p{Space}:]*:[^:]

答案 3 :(得分:0)

以下内容可以帮助您入门:

 Matcher MatchedPattern = Pattern.compile("^(\\w+\\:{1}[\"\\w\\s\\.]*)$").matcher("yourstring");