我有一个带有外卡的模式字符串,表示X(例如:abc *)。
此外,我还有一组字符串,我必须与给定的模式匹配。
例如:
abf - false
abc_fgh - true
abcgafa - true
fgabcafa - false
我尝试使用正则表达式,但它没有用。
这是我的代码
String pattern = "abc*";
String str = "abcdef";
Pattern regex = Pattern.compile(pattern);
return regex.matcher(str).matches();
返回false
还有其他方法可以使这项工作吗?
由于
答案 0 :(得分:6)
只需将bash样式模式用于Java样式模式转换器:
public static void main(String[] args) {
String patternString = createRegexFromGlob("abc*");
List<String> list = Arrays.asList("abf", "abc_fgh", "abcgafa", "fgabcafa");
list.forEach(it -> System.out.println(it.matches(patternString)));
}
private static String createRegexFromGlob(String glob) {
StringBuilder out = new StringBuilder("^");
for(int i = 0; i < glob.length(); ++i) {
final char c = glob.charAt(i);
switch(c) {
case '*': out.append(".*"); break;
case '?': out.append('.'); break;
case '.': out.append("\\."); break;
case '\\': out.append("\\\\"); break;
default: out.append(c);
}
}
out.append('$');
return out.toString();
}
Is there an equivalent of java.util.regex for “glob” type patterns?
Convert wildcard to a regex expression
答案 1 :(得分:1)
abc*
将是与ab
,abc
,abcc
,abccc
等匹配的RegEx。
你想要的是abc.*
- 如果abc
应该是匹配字符串的开头,那么它是可选的,如果有任何后续的话。
否则,您可以在.*
前面添加匹配中间为abc
的字符串:.*abc.*
一般情况下,我建议您使用this这样的网站来学习RegEx。你要求一个非常基本的模式,但很难说你需要什么。祝好运!
编辑:
您似乎希望用户键入文件名的一部分(或左右),并且您希望提供类似搜索功能的内容(您可以在问题IMO中明确说明)。在这种情况下,您可以从用户的输入中烘焙自己的RegEx:
private Pattern getSearchRegEx(String userInput){
return Pattern.compile(".*" + userInput + ".*");
}
当然,这只是一个非常简单的例子。您可以修改它,然后使用RegEx匹配文件名。
答案 2 :(得分:0)
所以我这里很瘦你的答案是:
您正在寻找的正则表达式为:[a][b][c].*
这是我的代码:
String first = "abc"; // true
String second = "abctest"; // true
String third = "sthabcsth"; // false
Pattern pattern = Pattern.compile("[a][b][c].*");
System.out.println(first.matches(pattern.pattern())); // true
System.out.println(second.matches(pattern.pattern())); // true
System.out.println(third.matches(pattern.pattern())); // false
但是,如果您只想查看以“{1}}:String
和.startsWith()
答案 3 :(得分:0)
你可以使用stringVariable.startsWith(“abc”)