Java正则表达式转义
我有一些代码可以在文本区域中获取url。它一直工作得很好,直到我尝试了一个包含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
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听起来很棘手。也许我可以帮你。