How to escape a square bracket for Pattern compilation
我有以逗号分隔的正则表达式列表:
1 | .{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z] |
我对逗号做了一个拆分。现在我正在尝试将这个regex与生成的密码匹配。问题是,
出于某种原因,上面的答案对我不起作用。对于像我这样的追随者,这是我发现的。
不过,如果将模式存储在字符串中,则必须使用两个反斜杠。第一个反斜杠将第二个反斜杠转义到字符串中,所以regex看到的是
1 | \\] |
在regex中,这将匹配一个右方括号。
例如,如果您试图匹配换行符,您只需要使用一个反斜杠。您正在使用字符串转义模式向字符串中插入换行符。regex没有看到
您可以使用
来自文档:
public static String quote?(String s) Returns a literal pattern
String for the specifiedString .This method produces a String that can be used to create a Pattern that would match the string s as if it were a literal pattern.
Metacharacters or escape sequences in the input sequence will be given no special meaning.
您可以使用q和e特殊字符…自动转义q和e之间的任何字符。
1 | \Q[0-9]\E |
1 | ".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]" |
然后用逗号分隔,最后得到五个完全有效的正则表达式:第一个匹配八个非行分隔符字符,第二个匹配一个ASCII数字,依此类推。除非你真的想匹配像