0

我一直在努力让它发挥作用,我快到了,但可以得到最后一场比赛。这是我使用的正则表达式:

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

这些是我尝试匹配的模式的一些示例

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

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

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

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

\s- 空格字符

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

4

1 回答 1

3

您一次匹配一个,对吗?那么\s匹配 #1 的意义是什么?

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

什么都没有了,所以\s无法匹配。也许您想(?:\s|$)匹配空格或 EOL。

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

于 2012-05-08T09:35:12.433 回答