2012-12-09 44 views
0

在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 
+1

何不第二個否定的例子嗎?你有嘗試過自己的東西嗎? –

+0

第二個冒號出現在一些空格之後。而且我對於正則表達式非常新鮮,所以我不想爲自己而努力= P – Kevin

+1

@Kevin現在爲什麼我們應該爲你而努力? ;)你應該閱讀[好教程](http://www.regular-expressions.info/tutorial.html)。正則表達式是很好的知識,你會經常使用它。 –

回答

3

如果用matches使用它(這需要整個字符串匹配),你可以使用

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

這意味着:任意許多非whitespace,非:字符,然後:,那麼更多的是任意多個非:個字符。

我真的只使用了兩個正則表達式概念:(否定的)character classesrepetition

如果要在:之前或之後至少需要一個字符,請將*替換爲+(如jlordo在評論中指出的那樣)。

+1

+1,但他可能希望在分號前加上'+'量詞。 – jlordo

+0

@jlordo hm,好點,雖然沒有在任何地方指定。但我會加上它 –

+0

是的,這就是爲什麼我寫的可能;) – jlordo

0

下面應該工作:

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

如果你的字符串可以包含換行符,使用DOTALL標誌或將正則表達式更改爲以下內容:

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

好吧,現在它仍然會匹配最後一個反例;) –

0

這取決於我們所說的白色空間,它可能是

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

'。+'將允許空白,你允許多個':'。 –

+0

對,固定它 –

+0

不完全。最後你錯過了一個'*';) –

0

應該讓你開始下面的:

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