Java中与SQL LIKE子句“%A%B%”等效的正则表达式是什么?
这是一个相当基础的问题,我正在学习Java的正则表达式。
我认为这是匹配模式:.*A.*B.*
我会编辑并添加更多特定于Java调用的信息。
编辑 #1:
//simplest match
"".matches( ".*A.*B.*" );
String foo = "";
foo.matches( ".*A.*B.*" );
编辑 #2: 从API文档中:
Pattern p = Pattern.compile(".*A.*B.*");
Matcher m = p.matcher("your-string-here");
boolean b = m.matches();
另外,我建议看一下RegexBuddy,它并非免费软件,但它可以生成许多语言的代码片段、测试和解析正则表达式等功能。
这是 ".?A.?B." 如果你使用 . 而不带 ?, 它会匹配整个字符串,因为 . (点) 表示 "任何字符",* 表示 0 到无限次。
Pattern p = Pattern.compile(".*?A.*?B.*");
Matcher m = p.matcher(str);
if (m.matches()) {
...
.*
的意思是“取到末尾的每个字符”。当你写.*A
时,它的意思是“取到末尾的每个字符,然后查找一个 A”。由于你已经使用.*
贪婪地匹配了所有内容,没有留下任何A
,所以该模式在例如 “A” 上不匹配。 - thejh.*A
会匹配"A",因为正则表达式引擎会在.*
匹配“太多”时回溯。贪婪和非贪婪的区别只有在使用括号捕获匹配项时才会发挥作用。 - John Kugelman