Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为模式编译跳出方括号?_Java_Regex_Escaping_Special Characters - Fatal编程技术网

Java 如何为模式编译跳出方括号?

Java 如何为模式编译跳出方括号?,java,regex,escaping,special-characters,Java,Regex,Escaping,Special Characters,我有一个逗号分隔的正则表达式列表: .{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z] 我对逗号做了拆分。现在我正试图将这个正则表达式与生成的密码进行匹配。问题是,Pattern.compile不喜欢未转义的方括号 请给我一个简单的函数,它接受如下字符串:[0-9]并返回您可以使用的转义字符串\[0-9\] 从文档中: 公共静态字符串引号​(字符串s) 为指定的String返回文本模式String 此方法生成一个字符串,该字符串可用于创建与字符串匹配的模式,就像它是文字模

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

.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]
我对逗号做了拆分。现在我正试图将这个正则表达式与生成的密码进行匹配。问题是,
Pattern.compile
不喜欢未转义的方括号

请给我一个简单的函数,它接受如下字符串:
[0-9]
并返回您可以使用的转义字符串
\[0-9\]

从文档中:

公共静态字符串引号​(字符串s)

为指定的
String
返回文本模式
String

此方法生成一个字符串,该字符串可用于创建与字符串匹配的模式,就像它是文字模式一样

输入序列中的元字符或转义序列没有特殊意义

你可以用

从文档中:

公共静态字符串引号​(字符串s)

为指定的
String
返回文本模式
String

此方法生成一个字符串,该字符串可用于创建与字符串匹配的模式,就像它是文字模式一样

输入序列中的元字符或转义序列没有特殊意义


您可以使用\Q和\E特殊字符…任何介于\Q和\E之间的字符都会自动转义

\Q[0-9]\E

您可以使用\Q和\E特殊字符…任何介于\Q和\E之间的字符都会自动转义

\Q[0-9]\E
Pattern.compile()
很喜欢方括号。如果你拿着绳子

".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"
用逗号将其拆分,最终得到五个完全有效的正则表达式:第一个匹配八个非行分隔符字符,第二个匹配一个ASCII数字,依此类推。除非您真的想匹配字符串,如
“{8}”
“[0-9]”
,否则我不明白您为什么需要转义任何内容。

Pattern.compile()
就像方括号一样。如果你拿着绳子

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

用逗号将其拆分,最终得到五个完全有效的正则表达式:第一个匹配八个非行分隔符字符,第二个匹配一个ASCII数字,依此类推。除非你真的想匹配字符串,比如
“{8}”
“[0-9]”
,否则我不明白你为什么需要转义任何内容。

出于某种原因,上面的答案对我不起作用。对于像我这样的追击者,以下是我的发现

我本来希望有一个反斜杠从括号中转义出来,但是,如果模式存储在字符串中,则必须使用两个反斜杠。第一个反斜杠将第二个反斜杠转义到字符串中,因此正则表达式看到的是
\]
。因为正则表达式只看到一个反斜杠,所以它使用它来避开方括号

\\] 
在正则表达式中,这将匹配单个结束方括号


例如,如果您试图匹配换行符,则只能使用一个反斜杠。您正在使用字符串转义模式在字符串中插入换行符。正则表达式没有看到
\n
-它看到换行符,并与之匹配。您需要两个反斜杠,因为它不是字符串转义序列,而是正则表达式转义序列。

出于某种原因,上面的答案对我不起作用。对于像我这样的追击者,以下是我的发现

我本来希望有一个反斜杠从括号中转义出来,但是,如果模式存储在字符串中,则必须使用两个反斜杠。第一个反斜杠将第二个反斜杠转义到字符串中,因此正则表达式看到的是
\]
。因为正则表达式只看到一个反斜杠,所以它使用它来避开方括号

\\] 
在正则表达式中,这将匹配单个结束方括号


例如,如果您试图匹配换行符,则只能使用一个反斜杠。您正在使用字符串转义模式在字符串中插入换行符。正则表达式没有看到
\n
-它看到换行符,并与之匹配。您需要两个反斜杠,因为它不是字符串转义序列,而是正则表达式转义序列。

如果您问我,听起来有点不太好,您是否在java中尝试过它(我没有,这就是为什么我问的原因)。它在java中也有效:(ctrl-F表示“\Q”)在java字符串文本格式中,它将是“\\Q[0-9]\\E”或“\\Q”+regex+“\\E”。但是quote()方法为您做到了这一点,而且它正确地处理了已经包含\E的字符串。如果您问我,听起来有点过分,您是否在java中尝试过它(我没有,这就是为什么我问的原因)。它在java中也有效:(ctrl-F表示“\Q”)在java字符串文字格式中,它将是“\\Q[0-9]\\E”或“\\Q”+regex+“\\E”。但是quote()方法可以为您做到这一点,而且它可以正确地处理已经包含\E的字符串。考虑到这一点,我想到了为什么会这样:正则表达式是一个字符串,任何处理该正则表达式的过程都会将单个反斜杠作为转义字符。然而,由于正则表达式是作为字符串传递的,为了将其正确地转换为字符串,您也必须对反斜杠进行转义,这就是为什么需要两个反斜杠的原因当考虑它时,我想到了为什么会这样:正则表达式是一个字符串,无论该正则表达式执行什么操作,都会将单个反斜杠作为转义字符。但是,由于正则表达式是作为字符串传递的,因此您也必须转义反斜杠,以便将其正确地转换为字符串,这就是为什么需要两个反斜杠的原因。
字符串的值是多少
Pattern.quote(“\[0-9\]”
?@DannyBullis来自问题“一个简单的函数,它接受这样一个字符串:
[0-9]
,并返回转义字符串
\[0-9\]
”。所以你给这个
“[0-9]”
,它将返回与
“\[0-9\]”
等价的东西。(它实际上使用了
\Q
\E
,但是当给
模式.compile
)时,最终结果具有相同的效果。Tha