2011-10-25 16 views
1

ウェブページから取得するHTMLの一部を正規表現で解読しようとしています。 タグをリンクに変換したいです。Android RegExで一致するものが見つかりません

私が使用しているコードは、私といくつかのテストプログラムに従ってうまく動作するはずですが、私はアンドロイドデバイスでそれを実行すると、(テストプログラムのように)マッチしません。

次のように私が使用していた正規表現は、(私はJavaでコーディングしていますので、私は同様にエスケープ文字をエスケープする必要が念頭に置いておく)である:

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

input.replaceAll(regularExpression, replacement); 

私はこのことから集めることができるものから、そのソースとのハイパーリンクに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> 

誰かが助けることができます私が間違っていることを説明してくれる?私は昨日正規表現の学習を始めましたが、私の人生にとってなぜこれがうまくいかないのか理解できません。

+0

SOの最も壮大な答えへの義務的なリンク:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – CommonsWare

+0

私はこれは一時的な解決策として私たちのために働くフォーマットを作り出すまでです。 – Lars

+0

」はまだ保持できません。 :-) – CommonsWare

答えて

2

メソッドString.replaceAllは、文字列を変更しません。文字列がimmutableであるためできません。代わりに、結果とともに新しい文字列を返します。この結果を何かに割り当てる必要があります。

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

また、HTMLを解析するために正規表現を使用しないでください。

+0

私はそのような愚かな間違いをしたと信じられない、それを私に指摘してくれてありがとう。 正規表現を使っている理由については、HTMLコードを書くことができない人がHTMLコードを入力しています。これはiPhoneとAndroidの両方で動作する必要があります。現在のところiPhoneで動作します。新しいAndroidアプリ、これは私の一時的な解決策になります。助けてくれてありがとう。 – Lars

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

これは動作するはずです。 @Mark Byersに加えて、あなたの正規表現は、削除された(二重)バックスラッシュであっても、あなたの入力と一致しないように見えます。

関連する問題