我按照this link中提供的所有答案(我最初发布了该问题) 并改变了我的正则表达式。
例如,我的正则表达式现在是
String regex = "(?i)[a-zA-Z0-9_.|-]*" + searchString + "(?i)[a-zA-Z0-9_.|-]*";
当我使用“test”作为我的搜索字符串进行搜索时,我想返回“testEcho”和“testEcho-1”作为我的搜索输出。
但是当我搜索“test”字符串时,我仍然无法返回testEcho和testEcho-1作为我的结果。
我的java代码是;
Pattern pattern=Pattern.compile(regex);
Matcher matcher = pattern.matcher(Name)
if (matcher.matches()) {
return XXX;
}
任何帮助?
编辑:
Pattern pattern=Pattern.compile(regex);
Matcher matcher1 = pattern.matcher("testEcho")
matcher1.matches --------->returns true
Matcher matcher2 = pattern.matcher("testEcho-1")
matcher2.matches --------->returns false
答案 0 :(得分:3)
我不确定您的输入数据是什么样的,但您可能
find
代替matches
,-
在字符类中转义\\-
,或将其放在开头[-...]
或结束[...-]
。 a-zA-Z0-9_
替换\\w
。 searchString
Pattern.quote()
转义正则表达式元字符
所以你的正则表达式看起来像
String regex = "(?i)[\\w.|-]*" + Pattern.quote(searchString) + "[\\w.|-]*";
试试这种方式
public static List<String> giveMe(String searchString, String input) {
List<String> results = new ArrayList<>();
String regex = "(?i)[\\w.|-]*" + Pattern.quote(searchString) + "[\\w.|-]*";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
results.add(matcher.group());
}
return results;
}
演示
System.out.println(giveMe("test","This is some string with testEcho " +
"and even testEcho-1 that I want to parse."));
输出:
[testEcho, testEcho-1]
[编辑]
根据您的示例判断,您要检查整个字符串是否与指定的正则表达式匹配。在这种情况下,可以尝试这种方法
public static boolean canFind(String searchString, String input) {
return input.matches("(?i)[\\w.|-]*" + Pattern.quote(searchString)
+ "[\\w.|-]*");
}
演示
System.out.println(canFind("test", "testEcho" ));//true
System.out.println(canFind("test", "TestEcho-1"));//true
System.out.println(canFind("test", "WestEcho-1"));//false
答案 1 :(得分:1)
我相信即使在Java中也只能为1个正则表达式模式设置一组标志,如果忽略大小写,则不需要 [a-zA-Z] :
String regex = "(?i)[a-z0-9_.|-]*" + searchString + "[a-z0-9_.|-]*";