正则表达式不符合我的所有模式

时间:2012-05-08 09:27:52

标签: regex

我一直试图让这个工作,我几乎在那里,但可以完全得到最后一场比赛。这是正则表达式使用:

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

这些是我试图匹配的模式的一些例子

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

此正则表达式将匹配2和3但不匹配1.我已尝试将?*添加到空格字符,但它不匹配任何内容。我想我误解了匹配的群体

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

(\(.*?\))? - 如果括号内的任何内容匹配,则忽略

\s - 空格字符

组1是字符串组2是括号内容(如果存在)

1 个答案:

答案 0 :(得分:3)

你一次匹配一个,对吗?那么\s的意思是匹配#1?

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

没有任何东西,所以\s无法匹配。也许你希望(?:\s|$)匹配空格或EOL。

也就是说,考虑使用(\S+)代替(.*?),因为它只会匹配非空格,因此会做同样的事情,但会更快。