我一直试图让这个工作,我几乎在那里,但可以完全得到最后一场比赛。这是正则表达式使用:
^`.*` (.*?)(\(.*?\))?\s
这些是我试图匹配的模式的一些例子
1.`asgKey` tinyblob
2.`is_asg` bit(1) DEFAULT NULL
3.`lastModified` datetime DEFAULT NULL
此正则表达式将匹配2和3但不匹配1.我已尝试将?
和*
添加到空格字符,但它不匹配任何内容。我想我误解了匹配的群体
(.*?)
- 匹配任意数量的字符
(\(.*?\))?
- 如果括号内的任何内容匹配,则忽略
\s
- 空格字符
组1是字符串组2是括号内容(如果存在)
答案 0 :(得分:3)
你一次匹配一个,对吗?那么\s
的意思是匹配#1?
`asgKey` tinyblob
^ ^ ^^ ^
| | || |
` .* ` (.*?)
没有任何东西,所以\s
无法匹配。也许你希望(?:\s|$)
匹配空格或EOL。
也就是说,考虑使用(\S+)
代替(.*?)
,因为它只会匹配非空格,因此会做同样的事情,但会更快。