2017-03-11 3 views
1

私は正規表現の文字列と操作に非常に新しいです。しかし、私は、文字列全体からAndroid RegexのテキストURLをクリック可能なリンクに変換する

<a href='$link'>$link </a> 

に(タグなし)テキストのURLを交換する必要がAndroidアプリを開発しようとしています私が働いていることのコード見つけ -

text_to_url= text_to_url.replaceAll("(<a[^>]+>)|(http(?s)://.*)", "<a href=\"$0\">$0</a>"); 

をしかし、私は上記のように認めて、私は正規表現の単語や機能には非常に新しいです。 でも、そのコードでurlをタグの中に入れることはできますが、urlの終わりに止まらない(*と思う)。

問題は、それが(URLが第一出現URLです)一つのリンクとして表示され、ラインバイ・サイドまたはラインによって2以上の連続link_text_urls側が存在する場合、あります。

私は何度も試して、このビットの結果を見つけるためにグーグルで検索しました。しかし、私の正規表現の知識は私がそれを見つけるのを助けることはできません。

私はその答えを親切に教えてください。私の問題を理解してくれてありがとう。

例のテキスト -

<h3>Post Title</h3> 
<p>This is a paragraph of text of the post</p> 
<img src="http://imageurl"> 
<p>Please read more on this link</p><br/> 
http://www.readmorelink.com/1212/1212post 
+0

文字列に複数のリンクがある場合、正確な結果はどうでしょうか?あなたはそれから分離したリンクのリストが欲しいですか? – stamanuel

+0

また、それは正規表現にする必要がありますか?また、JavaコードもOKですか? – stamanuel

+0

問題のように>タグの間でエンコードされるtext_urlを正規表現したいと思います。私の出力はwebview上にあるので。 –

答えて

0

正規表現にマイナーエラーがあります。 sをオプションにするには、http(?s)の代わりにhttps?である必要があります。 (?s)は、改行文字にも一致するようにするためのインライン修飾子を意味します。.
限り

としてではなく、それははいあなたが正しいです


(私は*によると思います)、URLの最後に停止しない、それがgreedy by defaultあるので*です。後に?を追加することで怠け者にすることができます。
しかし、より良いアプローチは[^\s\n]*が空白や改行以外の文字がゼロまたは複数回マッチします。この

text_to_url= text_to_url.replaceAll("(?<!\")(https?://[^\s\n]*)(?!\")", "<a href=\"$0\">$0</a>"); 

を使用することです。

+0

Thank you for great answer, your code is working after changing "replaceAll("(] +>)|(https?:// [^ \\ s \\ n] *) "、" $0 "); 。 でもimgタグに取って代わりました。どのようにしてこの正規表現からimg srcを除外できますか?どうもありがとうございます。 –

+0

タグまたはhttp://example.com/image.jpgのような画像のURLを意味しますか? – ManzoorWani

+0

はい| png | jpg | gif |これらの形式のように。ありがとうございました。 –

0

は、あなたが間違っている使用している正規表現のように見えます。

これを試してみてください:この正規表現は私からではありません

text_to_url = text_to_url.replaceAll("(?i)\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))", "<a href=\"$0\">$0</a>"); 

、それはジョン・グルーバーから実際に、よくここで説明されています。http://daringfireball.net/2010/07/improved_regex_for_matching_urls

あなたがしようとして遊ぶことができ、さまざまなエディタがあります。たとえば、正規表現この1つ:https://regex101.com/ - 彼らは何が起こっているのかを理解するのに非常に便利です。

+0

ありがとうございます、あなたのコードは、必要な結果として出力を取ることができます。しかし、それはまた

関連する問題