匹配括号与RowFilter(regexFilter)

时间:2012-12-08 12:42:33

标签: java regex swing jtable rowfilter

protected void searchFilter(String s, int n) 
{
        RowFilter<MyTableModel, Object> rf = null;
        try {
            System.out.println(s);
            rf = RowFilter.regexFilter(s, n);
        } catch (PatternSyntaxException e) {
            System.out.println(e);
        }
        filters.add(rf);
    }

我正在尝试匹配包含括号的JTable中的字符串。在上面的代码中,字符串参数可以是: 约翰(史密斯)

我正在搜索的专栏:

Jane (Doe)
John (Smith)
John (Smith)
Jack (Smith)

我希望它返回的地方:

John (Smith)
John (Smith)

但是现在它不会返回任何东西。我查看了Matcher,Pattern和RowFilter的文档,但到目前为止没有任何帮助。

1 个答案:

答案 0 :(得分:4)

括号是正则表达式中的元字符。因此,您实际上是在尝试匹配John Smith(没有括号)。你需要做的就是逃避它们。

Java有一个内置函数可以自动转义所有元字符:Pattern.quote。通过此功能运行s,它应该修复它。

另请注意,您可能希望使用^...$包围模式。否则它会接受包含This is John (Smith) foobar.之类的行(因为正则表达式很高兴,如果它可以匹配输入的子字符串)。