2012-05-08 104 views
0

我一直試圖讓這個工作,我幾乎在那裏,但可以完全得到最後一場比賽。這是正則表達式即時通訊使用:正則表達式不會匹配我所有的模式

^`.*` (.*?)(\(.*?\))?\s 

這些模式的一些例子我想匹配

1.`asgKey` tinyblob 
2.`is_asg` bit(1) DEFAULT NULL 
3.`lastModified` datetime DEFAULT NULL 

此正則表達式匹配2和3而不是1。我曾嘗試加入?*的空格字符,但它不匹配任何東西。我想我誤解了匹配組

(.*?) - 匹配任意數量的字符

(\(.*?\))?的 - 如果有括號匹配在他們裏面什麼都不理

\s - 空格字符

組1字符串組2是括號中的內容(如果存在的話)

+0

http://www.rubular.com/r/Um6RvZPHDJ適合我。 – codaddict

+1

@codaddict,是因爲'\ s'匹配換行符。如果你只有第一個例子,它不會匹配。 [Rubular](http://www.rubular.com/r/wi5QWjvxVO) – stema

+0

它無法使用這一個http://www.regexplanet.com/advanced/java/index.html –

回答

3

您一次只匹配一個,對吧?那麼\s是爲了匹配#1?

`asgKey` tinyblob 
^^ ^^ ^
| | || | 
` .* ` (.*?) 

沒有什麼了,所以\s不能匹配。也許你想(?:\s|$)匹配空間或EOL。

也就是說,考慮使用(\S+)而不是(.*?),因爲它只會匹配非空格,因此會做同樣的事情,但速度更快。

+0

(\ S +)似乎可以做到這一點 –