如何为模式编译转义方括号?
2022-09-01 07:11:06
我有逗号分隔的正则表达式列表:
.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]
我已经对逗号进行了拆分。现在,我正在尝试将此正则表达式与生成的密码进行匹配。问题是不喜欢不转义的方括号。Pattern.compile
有人可以给我一个简单的函数,它采用这样的字符串:并返回转义字符串。[0-9]
\[0-9\]
我有逗号分隔的正则表达式列表:
.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]
我已经对逗号进行了拆分。现在,我正在尝试将此正则表达式与生成的密码进行匹配。问题是不喜欢不转义的方括号。Pattern.compile
有人可以给我一个简单的函数,它采用这样的字符串:并返回转义字符串。[0-9]
\[0-9\]
由于某种原因,上述答案对我不起作用。对于那些像我这样后来的人,这是我的发现。
我期望一个反斜杠来逃避括号,但是,如果你将模式存储在字符串中,则必须使用两个反斜杠。第一个反斜杠将第二个反斜杠转义到字符串中,以便正则表达式看到的是 。由于正则表达式只看到一个反斜杠,因此它使用它来转义方括号。\]
\\]
在正则表达式中,这将匹配单个右方括号。
例如,如果您尝试匹配换行符,则只会使用单个反斜杠。您正在使用字符串转义模式在字符串中插入换行符。正则表达式看不到 - 它看到换行符,并匹配它。您需要两个反斜杠,因为它不是字符串转义序列,而是正则表达式转义序列。\n
您可以使用 Pattern.quote(String)。
从文档中:
public static String quote(String s)
返回指定 的文本模式。
String
String
此方法生成一个 String,该字符串可用于创建与字符串 s 匹配的模式,就好像它是文本模式一样。
输入序列中的元字符或转义序列将不具有特殊含义。