我必须找出from和IN_TXT
之间的匹配,并且应该忽略两个单词之间的任何内容,并说它是匹配的。我尝试使用下面的表达但不起作用。,
String table="IN_TXT";
String s="select * from JAN_X.IN_TXT";
if((s.matches("from"+"(.*)"+table))){
System.out.println``("Matched");
}
这里可能缺少什么?
答案 0 :(得分:1)
matches
会添加^
和$
锚点,因此您的正则表达式与您的输入不完全匹配
因此您可以将.*?
用作.*?from"+"(.*)"+table
,其中.*?
将覆盖from
之前发生的字符串
.*?
匹配尽可能少的次数
String s = "select * from JAN_X.IN_TXT";
String table = "IN_TXT";
if ((s.matches(".*?from" + "(.*)" + table))) {
System.out.println("Matched");
}
如果要提取JAN_X
,则可以使用
// $1 represents (.*) capture group
String s2= s.replaceAll(".*?from (.*)\\."+table,"$1");
System.out.println(s2);
输出
JAN_X