1

我正在尝试使用正则表达式来解码我从网页中检索到的一些 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>

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

4

2 回答 2

2

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

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

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

于 2011-10-25T10:30:37.213 回答
0
String resultString = subjectString.replaceAll("(?=<(iframe)\\s+src\\s*=\\s*(['\"])(.*?)\\2[^>]*>).*?</\\1>", "<a href=$3>Youtube</a>");

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

于 2011-10-25T10:37:36.040 回答