2

我有这段代码可以在 textarea 中获取 url。在我尝试了一个带有 a 的网址之前,它一直运行良好'+'

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

所以我尝试将\\+and\\\\+放入我的代码中,但它不起作用。所以我做了一些谷歌搜索和堆栈溢出问题一直提到这个人

Pattern.quote("+");

但是,我不确定如何将该声明实现到我现在拥有的内容中。如果这甚至是我想走的路。但我假设我需要做这样的事情......

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

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

4

2 回答 2

3

\只是用, 例子来转义引号

Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z\"]*)(.*)");
于 2012-10-17T05:22:17.610 回答
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

于 2012-10-17T05:34:05.570 回答