正则表达式:完全匹配由分隔符拆分的字符串

时间:2015-02-25 03:49:28

标签: java mysql sql regex

我有一个字符串,其分隔符如“|”

e.g. "South NY, US | South-East NY, US| North NY, US"

注意:任何一侧管道周围的空间可能会也可能不会出现。

我一直在尝试使用.contains()来匹配给定的字符串,但它也匹配“East NY,US”这样的情况

我有一个小函数(在java中)来匹配搜索字符串,但效率很低。

boolean fullmatch (String search, String text) {
    String[] split = text.split ("\\|");
    for (int i = 0; i < split.length; i++) {
         if (split[i].trim().equals (search)) {
             return true;
         }
    }
    return false;
}

这个等价的正则表达式是什么?谢谢你

附加:SQL中的等效正则表达式也是什么? (尽量不要在Java中提取大量数据进行比较)

2 个答案:

答案 0 :(得分:4)

我怀疑你的方法效率太低,或者你可以提高效率;但是为了更简洁和更简单的代码(也会至少表现得更好),你可以写:

boolean fullmatch (String search, String text) {
    return Pattern.compile(
        "(?:^|\\|)\\s*" + Pattern.quote(search) + "\\s*(?:\\||$)")
        .matcher(text).find();
}

例如,如果您的search"South-East NY, US",则如果text包含匹配(?:^|\|)\s*South-East NY, US\s*(?:\||$)的子字符串(字符串开头或 - ),则上述内容将返回true管道,加上可选的空格,加上搜索字符串,加上可选的空格,加上管道或字符串结尾)。

答案 1 :(得分:0)

试试这个:

boolean fullmatch (String search, String text) {
    return text.matches(".*(^|\\|)\\s*" + search + "\\s*(\\||$).*");
}
相关问题