2012-05-08 70 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 +)似乎可以做到这一点 –