处理字符串的小技巧

将元字符转义

需求: 在String中有一些属于是正则或者通配符的元字符, 而想将这个String转化,或者嵌入到正则中做查询, 需要将这些元字符转义:

    public static final Set ESCAPE_WORDS = new HashSet<>(Arrays.asList(".", "*", "\\", "?", "&", "$", "^", "+", "|", "(", ")", "[", "]", "{", "}"));
    public static final String ESCAPE_PATTERN = ESCAPE_WORDS.stream()
        .map(s1 -> "\\" + s1)
        .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
        .insert(0, "([")
        .append("])").toString();
    public static final String ESCAPE_REPLACEMENT = "\\\\$1";
    public static Function escapeRegexp = s -> s.replaceAll(ESCAPE_PATTERN, ESCAPE_REPLACEMENT);

判断是否是正则,还是纯字面量

用户的查询String, 试图用Regex.compile(string)的结果的语法树来判断string是否是字面量还是正则,是不可以, 因为元字符的存在, 是的String的查询意图本身就具有二义性.

在算法4中提到了字串搜索

你可能感兴趣的:(处理字符串的小技巧)