1

正規表現を使用して、Webページから取得した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 に答える