我正在编写一个Java应用程序,用户可以根据用户提供的过滤器减少字符串列表。
例如,用户可以输入过滤器,例如:
ABC*xyz
这意味着用户正在查找以ABC开头并且后面跟着xyz的字符串(这与搜索ABC*xyz*
相同)
用户可以输入的过滤器的另一个示例是:
*DEF*mno*rst
这意味着字符串可以从任何内容开始,但必须跟随DEF,然后是mno,然后是rst。
如果我的字符串与用户指定的过滤器匹配,我将如何编写Java代码以生成我需要弄清楚的正则表达式?
答案 0 :(得分:1)
如果将您的语法转换为正则表达式,那就是" easy"要做到这一点(避免自己写一个词法分析器),你必须记住要正确地逃避你的字符串。
因此,如果沿着这条路走下去,你应该在语法中引用不是通配符的位并加入正则表达式<div style="width:529px; height:220px; background-image:url('image.jpg')" align="center">
<div style="width:529px; padding: 165 0 0 0" align="center">
...form ...
<div>
<div>
(或{{1}如果你想让.*
表示&#34;至少一个字符)。使用.+
,*
,*
,.
以及所有其他正则表达式特殊字符时,这可以避免不正确的结果。
尝试类似:
(
请注意,通过使用Matcher#matches()(不是)
)并留下尾随public Pattern createPatternFromSearch(String query) {
StringBuilder sb = new StringBuilder();
for (String part : query.split("\\*")) {
if (part.length() > 0) {
sb.append(Pattern.quote(part));
}
sb.append(".*");
}
return Pattern.compile(sb.toString());
}
// ...
// then you can use it like....
Matcher matcher = createPatternFromQuery("*DEF*mno*rst").matcher(str);
if (matcher.matches()) {
// process the matching result
}
,它将满足您在开始时锚定的语法。
答案 1 :(得分:-1)
将*
替换为.*
并使用正则表达式。
String str = "*DEF*mno*rst";
String regex = str.replaceAll("*", ".*");