这就是问题所在:向用户呈现一个文本字段,他或她可以在该字段上键入过滤器。过滤器,用于过滤未过滤的数据。经历 Oracle Forms 洗脑的用户,除了 % 之外没有其他特殊字符,我猜它或多或少代表 Java 中的“.*”正则表达式。
如果用户行为良好,给定的人会输入“CTHULH%”之类的东西,在这种情况下,我可以构建一个模式:
Pattern.compile(inputText.replaceAll("%", ".*"));
但是,如果用户来自印斯茅斯,他将无法通过几个简单的按键输入“.+\[a-#$%^&*(”来破坏我的方案。这将不起作用:
Pattern.compile(Pattern.quote(inputText).replaceAll("%", ".*"));
因为它会将 \Q 放在字符串的开头,将 \E 放在字符串的末尾,从而使我的 % -> .* 开关没有意义。
问题是:我是否必须查找模式代码中的每个特殊字符并通过在前面添加“\\”来自行转义,还是可以自动完成?还是我对问题太深入了,我忽略了一些明显的解决方法?