Java正则表达式转义

Java正则表达式转义,java,regex,Java,Regex,我有一些代码可以在文本区域中获取url。它一直工作得很好,直到我尝试了一个包含'+'的url Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z]*)(.*)"); Matcher matcher = pattern.matcher(text); 所以我试着在我的代码中加入\\+和\\\\+,但没有成功。所以我做了一些谷歌搜索和堆栈溢出问题不断提到这个家伙 Pattern.quote("+"); 然而,我不知道

我有一些代码可以在文本区域中获取url。它一直工作得很好,直到我尝试了一个包含
'+'
的url

Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z]*)(.*)");
Matcher matcher = pattern.matcher(text);
所以我试着在我的代码中加入
\\+
\\\\+
,但没有成功。所以我做了一些谷歌搜索和堆栈溢出问题不断提到这个家伙

Pattern.quote("+");
然而,我不知道我是如何将这句话落实到我现在拥有的东西中的。如果这是我想走的路。但我想我需要做一些像这样的事情

String quote = Pattern.quote("+");
Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z]*)(.*)");
Matcher matcher = pattern.matcher(text);

然后在模式中的某个地方添加变量引号?请帮忙!我今天刚学了这个东西,我是个新手!谢谢?

只需使用
\
转义引用,例如

Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z\"]*)(.*)");

只需使用
\
转义引号,例如

Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z\"]*)(.*)");
请记住,
[
]
表示一类字符,这意味着其中的任何字符都将包括在内<代码>[aegl]+将匹配“年龄”、“a”、“e”、“g”、“鹰”和“加格尔”。这也意味着列出两次的字符(如
/
)是完全冗余的

Pattern.quote很有用,但只返回在任何特殊字符前带有反斜杠的相同字符串。
Pattern.quote(“+”
将返回
\+

因为
+
在方括号内没有意义,所以您应该能够在方括号内放置一个
+
未缩放。在这一点上,您还可以添加一个
\
,如果它让您感觉更好

Pattern pattern = Pattern.compile("(.*)(https?[:/.0-9-?a-z=_#!A-Z+]*)(.*)");
Pattern pattern = Pattern.compile("(.*)(https?[:/.0-9-?a-z=_#!A-Z\\+]*)(.*)");
请看这里:

请记住,
[
]
表示一类字符,这意味着其中的任何字符都将包括在内。
[aegl]+
将匹配“年龄”、“a”、“e”、“g”、“鹰”和“加格尔”。它还意味着列出两次的字符(如
/
)是完全冗余的

Pattern.quote很有用,但只返回在任何特殊字符前带有反斜杠的相同字符串<代码>模式。引号(“+”将返回
\+

因为
+
在方括号之间没有意义,所以您应该能够在方括号内放置
+
未缩放。在这一点上,你也可以添加一个
\\
,如果它能让你感觉更好的话

Pattern pattern = Pattern.compile("(.*)(https?[:/.0-9-?a-z=_#!A-Z+]*)(.*)");
Pattern pattern = Pattern.compile("(.*)(https?[:/.0-9-?a-z=_#!A-Z\\+]*)(.*)");

请参见此处:

也删除
/
。a) 它应该是\\,并且b)您不需要像这样在字符类中转义点吗?Pattern=Pattern.compile((.*)(https?[:/.0-9-?a-z=235;!a-z\'quote\']*)(.*)@波希米亚人,我不明白。为什么要删除
/
?我认为它没有逃过点。不幸的是,对于我来说,新代码并没有逃过+。你确定我只是把字符串放进模式中了吗?@gmustudent这个怎么样<代码>(.*)(https?[:/.0-9-?\+a-z=#!a-z\“]*)(.*)也删除
/
。a)它应该是\\,b)不需要像这样在字符类中转义点?模式模式=模式。编译((.*)(https?[:/.0-9-?a-z=#a-z=#a-z\“]*)(.*))@Bohemian,我不明白。你为什么要删除
/
?我想它没有漏掉点。不幸的是,它没有用新代码为我漏掉+。你确定我只是把字符串放进模式中了吗?@gmustudent这个怎么样?
(.*)(https?[:/.0-9-?\+a-z=\u35;!a-z\]*)(.*)
非常感谢你的解释。它为我澄清了很多事情,我学到了很多。不幸的是,这似乎在控制台中工作得很好,但每次在我的web应用程序中都会出现故障。它只是出于某种原因讨厌+符号,不会读它。我不明白为什么。@gmustudent听起来很棘手。也许我可以帮你。非常感谢你的解释。它为我澄清了很多事情,我学到了很多。不幸的是,这似乎在控制台中工作得很好,但每次在我的web应用程序中都会出现故障。它只是出于某种原因讨厌+符号,不会读它。我不明白为什么。@gmustudent听起来很棘手。也许我可以帮你。