将php正则表达式转换为android java正则表达式

时间:2015-05-05 13:13:31

标签: java php android regex

有人可以帮我将PHP正则表达式转换为Java格式吗?

如果有人能帮助我,我会很感激,因为我在正则表达方面并不那么强大。

这是一个PHP代码:

$string = file_get_contents('a.txt');
$regex = '/\b(http|https):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i';
preg_match_all($regex, $string, $matches);
$urls = $matches[0];

2 个答案:

答案 0 :(得分:3)

您应该双重转义后退斜杠,而不必转义/ s:

String rx = "(?i)\\b(http|rtmp|rtsp|mmsh|mms)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]";

获取所有匹配项的示例代码(不要忘记包含import java.util.regex.*;):

String str = "http://google.com";

String rx = "(?i)\\b(http|rtmp|rtsp|mmsh|mms)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]";
Pattern ptrn = Pattern.compile(rx);
Matcher m = ptrn.matcher(str);
while (m.find()) {
   System.out.println(m.group(0));
}

答案 1 :(得分:2)

基本的正则表达式语法在所有语言中是相同的只是要小心转义字符的东西。 要使用\\转义特殊字符,则无需转义/

并且一些参数将在java中以不同的方式给出。

在开头使用(?i)而不是在结尾使用/i

边界表达式\b在java中也一样,但是你需要在java中添加\\b,因为\b将被视为退格后退空格字符

您的模式将如下所示:

(?i)\\b(http|rtmp|rtsp|mmsh|mms)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]