使用星号字符搜索文本的正则表达式

时间:2015-05-14 21:14:19

标签: java regex search filter

我正在编写一个Java应用程序,用户可以根据用户提供的过滤器减少字符串列表。

例如,用户可以输入过滤器,例如:

 ABC*xyz

这意味着用户正在查找以ABC开头并且后面跟着xyz的字符串(这与搜索ABC*xyz*相同)

用户可以输入的过滤器的另一个示例是:

 *DEF*mno*rst

这意味着字符串可以从任何内容开始,但必须跟随DEF,然后是mno,然后是rst。

如果我的字符串与用户指定的过滤器匹配,我将如何编写Java代码以生成我需要弄清楚的正则表达式?

2 个答案:

答案 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("*", ".*");