Java Regex Escape

时间:2012-10-17 05:20:25

标签: java regex

我有一些代码可以在textarea中获取一个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);

然后在模式中的某处添加变量引用?请帮忙!我今天刚刚学会了这些东西我是新手!谢谢?

2 个答案:

答案 0 :(得分:3)

使用\,示例

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

答案 1 :(得分:1)

(https?[://.0-9-?a-z=_#!A-Z]*)

请记住,[]表示一类字符,这意味着其中的任何字符都将被包含在内。 [aegl]+将匹配“age”,“a”,“e”,g“,”eagle“和”gaggle“。这也意味着列出两次的字符(如/)完全是多余的

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\\+]*)(.*)");

请在此处查看:http://fiddle.re/0780