【发布时间】:2013-09-23 08:11:36
【问题描述】:
有没有省事:
private static final String LUCENE_ESCAPE_CHARS = "[\\\\+\\-\\!\\(\\)\\:\\^\\]\\{\\}\\~\\*\\?]";
private static final Pattern LUCENE_PATTERN = Pattern.compile(LUCENE_ESCAPE_CHARS);
private static final String REPLACEMENT_STRING = "\\\\$0";
并在多线程环境中使用以下内容,例如 servlet 的 doGet()?
String escaped = LUCENE_PATTERN.matcher(query).replaceAll(REPLACEMENT_STRING);
我现在主要关心的是增加额外的延迟(例如由于锁定)或出现错误发生的情况。
【问题讨论】:
-
如果大多数字符在字符类
[]中,则不需要转义。如果定位正确,^和-和]等字符可以在[]中进行非转义。例如:final String LUCENE_ESCAPE_CHARS = "[]\\\\+!():^{}~*?-]"; -
]如果跟在开头[之后,则不需要转义。^如果不在第一个位置,则不需要转义。-如果它位于最后一个位置,则不需要转义。 -
@U 你是否特别提到了朗讯?
-
不,我指的是 java 正则表达式。通常,大多数需要转义的字符在字符类中不需要它。
标签: java multithreading tomcat servlets pattern-matching