Android RegEx找不到匹配项

时间:2011-10-25 10:27:24

标签: android regex replaceall

我正在尝试使用正则表达式来解码我从网页检索的一些HTML。 我想将一些<iframe>标签转换为链接。

我正在使用的代码应该可以正常工作,根据我和一些测试程序,但是当我在我的Android设备上运行时它没有找到任何匹配(在测试程序中它的位置)。

我正在使用的正则表达式如下(请记住我用Java编码,所以我也需要转义转义字符):

String regularExpression = "<iframe.+?src=\\\\?(\\S+).+?(><\\\\?/iframe>|\\\\?/>)";
String replacement = "<a href=$1>Youtube</a>";

input.replaceAll(regularExpression, replacement);

从我可以从中收集的内容,它应该将具有<iframe>属性的所有src标记替换为具有该源的超链接。但是,当我向它提供以下输入时,它没有做任何事情:

<iframe src=\"http:\/\/www.youtube.com\/embed\/s6b33PTbGxk\" frameborder=\"0\" width=\"500\" height=\"284\"><\/iframe>

响应只是完全相同的文本,只删除了转义字符:

<iframe src="http://www.youtube.com/embed/s6b33PTbGxk" frameborder="0" width="500" height="284"></iframe>

有人可以帮助我并解释我做错了什么吗?我昨天才开始学习正则表达式,但我不能为我的生活弄清楚为什么这不起作用。

2 个答案:

答案 0 :(得分:2)

方法String.replaceAll不会修改字符串。它不能,因为字符串是immutable。相反,它返回一个带有结果的新字符串。您需要将此结果分配给某些内容:

String result = input.replaceAll(regularExpression, replacement);

另外,不要使用正则表达式来解析HTML。

答案 1 :(得分:0)

String resultString = subjectString.replaceAll("(?=<(iframe)\\s+src\\s*=\\s*(['\"])(.*?)\\2[^>]*>).*?</\\1>", "<a href=$3>Youtube</a>");

这应该有效。除了@Mark Byers之外,注意你的正则表达式似乎与你的输入不匹配,即使删除了(双)反斜杠。