Java Regex:String.split和Pattern.matches不一致

Java Regex:String.split和Pattern.matches不一致,java,regex,Java,Regex,我正在练习我的regex lookarounds,为此,我试图从sqlinsert语句中提取表名。我有regex(?如果您使用以下命令时遇到同样的问题,我会尝试: Pattern p = Pattern.compile(yourRegex); Matcher m = p.matcher(inputString); 并检查m.find()是否返回true Pattern.matches希望整个字符串都匹配-它可能与lookarounds有问题,因为这些是零宽度断言,因此匹配的字符被丢弃。如果您

我正在练习我的regex lookarounds,为此,我试图从sqlinsert语句中提取表名。我有regex
(?如果您使用以下命令时遇到同样的问题,我会尝试:

Pattern p = Pattern.compile(yourRegex);
Matcher m = p.matcher(inputString); 
并检查
m.find()
是否返回true


Pattern.matches
希望整个字符串都匹配-它可能与lookarounds有问题,因为这些是零宽度断言,因此匹配的字符被丢弃。

如果您使用以下命令时遇到同样的问题,我会尝试:

Pattern p = Pattern.compile(yourRegex);
Matcher m = p.matcher(inputString); 
并检查
m.find()
是否返回true


Pattern.matches
希望整个字符串都匹配-它可能与lookarounds有问题,因为这些是零宽度断言,因此匹配的字符被丢弃。

只是给Joanna的答案增加一点:Lookaheads和lookbehinds不参与匹配。
Pattern.matches
需要t正则表达式匹配从字符串的开头一直到结尾。由于您有一个正向的后向查找(
INSERT-INTO
),匹配从
text
开始,而该文本不在开头。同样,结尾处的前向查找也意味着结尾处没有匹配


split
按预期工作,因为它不需要从开头开始匹配。

只是给Joanna的答案增加一点:Lookaheads和lookbehinds不参与匹配。
模式。matches
要求正则表达式匹配从字符串的开头一直到结尾。因为您有一个正向的后向查找(
插入到
),匹配从不在开头的
文本开始。同样,结尾的前向查找也意味着结尾没有匹配


split
按预期工作,因为它不需要从开头开始匹配。

模式。匹配不用于匹配整个字符串?在您的情况下,查找框不是真正的“匹配”,而是测试。
模式。匹配不用于匹配整个字符串?在您的情况下,查找框是n不是真的“匹配”,而是测试。谢谢你的答案,但我发现艾伦的信息更丰富。(-,)谢谢你的答案,但我发现艾伦的信息更丰富。(-,)
Pattern.matches(regex, searchString)
Pattern p = Pattern.compile(yourRegex);
Matcher m = p.matcher(inputString);