如何逃脱模式编译方括号(How to escape a square bracket for Pat

2019-06-26 04:22发布

我有逗号分隔的正则表达式的列表:

.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]

我已经做了逗号分割。 现在,我试图来匹配生成的密码,这个正则表达式。 问题是, Pattern.compile不喜欢是没有逃过方括号。 一些可以给我一个简单的函数,接受一个字符串,像这样: [0-9]并返回转义字符串\[0-9\]

Answer 1:

您可以使用Pattern.quote(String)

从文档:

public static String quote​(String s)

返回文本模式String指定的String

这种方法产生了可用于创建一个模式就好像它是一个文字图案,将匹配字符串s的字符串。

在输入序列中的元字符或转义序列将给予没有特殊含义。



Answer 2:

出于某种原因,上面的回答并没有为我工作。 对于那些像我这样谁过来后,这里是我发现了什么。

我期待一个反斜杠逃脱支架,但是,你必须使用两个,如果你有存储在一个字符串的模式。 第一个反斜杠转义第二个到字符串,这样,所看到的正则表达式是\] 因为regex只是看到一个反斜杠,它使用它来逃脱方括号。

\\] 

在正则表达式,将匹配单个闭合方括号。

如果你想,虽然与后面,例如,你只使用单反斜线。 您正在使用的字符串转义模式中插入一个换行符到字符串。 正则表达式没有看到\n -它看到换行符,并匹配。 你需要两个反斜杠,因为它不是一个字符串转义序列,这是一个正则表达式转义序列。



Answer 3:

您可以使用\ Q和。\ E特殊字符...任何\ Q之间和\ E被自动转义。

\Q[0-9]\E


Answer 4:

Pattern.compile()喜欢方括号就好了。 如果你把字符串

".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"

并把它分解的逗号,你结束了五个完全有效的正则表达式:第一个匹配的八个非行分隔符,第二相匹配的ASCII数字,等等。 除非你真的想匹配字符串一样".{8}""[0-9]" ,我不明白你为什么会需要转义任何东西。



文章来源: How to escape a square bracket for Pattern compilation