【发布时间】:2012-04-29 03:47:07
【问题描述】:
我正在练习我的正则表达式外观,为此,我试图从 SQL 插入语句中提取表名。我有正则表达式(?<=INSERT INTO )\w+(?= (\(|VALUES).+),我正在字符串INSERT INTO tests VALUES (regex, test) 上对其进行测试。虽然我知道我的正则表达式没有精心完成,但我希望它与我输入的 tests 子字符串匹配。
我正在使用 Java 的正则表达式引擎,并且正在打印我在正则表达式上 String.split 和在正则表达式上 Pattern.matches 时发生的结果。我得到以下看似矛盾的结果
regex> (?<=INSERT INTO )\w+(?= (\(|VALUES).+)
string> INSERT INTO tests VALUES (regex, test)
[INSERT INTO , VALUES (regex, test)]
regex> (?<=INSERT INTO )\w+(?= (\(|VALUES).+)
string> INSERT INTO tests VALUES (regex, test)
false
现在只是为了记录下来,产生第一个结果的代码是
Arrays.toString(searchString.split(regex))
第二个来自
Pattern.matches(regex, searchString)
split 不是将匹配的字符串拆分为其参数吗?这意味着正则表达式匹配tests,因此结果为[INSERT INTO , VALUES (regex, test)]。那么,为什么Pattern.matches 返回 false?我错过了什么?
【问题讨论】:
-
Pattern.matches不是用来匹配整个字符串的吗?在您的情况下,环顾四周并不是真正的“匹配”,而是测试。