需要正则表达式,用于查找字符串中的数字和字母字符

时间:2013-05-09 17:10:16

标签: numeric

这就是我想要做的。用户可以输入搜索字符串,其中可以包含“*”或“?”通配符。我发现这适用于常规字符串,但不包括数字字符。

e.g: 414D512052524D2E535441524B2E4E45298B8751202AE908 1208

如果我查找该十六进制字符串的一部分,则返回false。如果我在“1208”字符串中查找“120”或“208”,则会失败。

现在,当用户输入时,我的正则表达式模式看起来像这样,说“w?f”:'\ bw。?f \ b'

我(显然)目前并不精通正则表达式,但会感谢有人可能需要以我需要的方式处理数字字符的任何指示 - 谢谢!

有问题的代码:

 /**
 *
 * @param searchString
 * @param strToBeSearched
 * @return
 */
public boolean findString(String searchString, String strToBeSearched) {
    Pattern pattern = Pattern.compile(wildcardToRegex(searchString));
    return pattern.matcher(strToBeSearched).find();
}

private String wildcardToRegex(String wildcard){
    StringBuffer s = new StringBuffer(wildcard.length());
    s.append("\\b");
    for (int i = 0, is = wildcard.length(); i < is; i++) {
        char c = wildcard.charAt(i);
        switch(c) {
        case '*':
            s.append(".*");
            break;
        case '?':
            s.append(".?");
            break;
        default:
            s.append(c);
            break;
        }
    }
    s.append("\\b");
    return(s.toString());
}

1 个答案:

答案 0 :(得分:0)

让我们假设您要搜索的字符串是

1208

用户输入的搜索“术语”是

120

那么模式是

\b120\b

\b(字边界)元字符匹配“字”的开头结束
在我们的示例中,这不起作用,因为120!= 1208

模式必须是

\b.*120.*\b

其中.*表示match a variable number of characters (including null)

<强>解决方案:

  • .*添加到您的wildcardToRegex(...)方法中,以使此功能开箱即用,
  • 或者告诉您的用户搜索*120*,因为您的*通配符完全相同。
    事实上,这是我的偏好,因为用户可以定义是否搜索以某些内容开头的条目(搜索something*),包括某些内容(*something*),以某些内容结尾({{1} }),或者恰好是某种东西(*something)。