0

URLに一致する正規表現を取得しようとしています(例:'http://www.test.com')そしてその周りにアンカータグを配置します-その部分はすでに次のように機能しています:

regex = @"(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:;,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[A-Z0-9+&@#\/%=~_|$])"
msg = r.Replace( msg, "<a target=\"_blank\" href=\"$0\">$0</a>" );

ただし、入力テキストに画像タグがある場合、画像タグのsrc属性内にアンカータグが誤って配置されます。

<img src="<a>...</a>" />;

これまでのところ、私はこれを回避しようとしています:(機能していません)

regex = @"(?!(src=""))(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:;,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[A-Z0-9+&@#\/%=~_|$])"

編集:

(テスト入力の例):

<p>
    www.test1.com<br />
    <br />
    http://www.test2.com<br />
    <br />
    https://www.test3.com<br />
    <br />
    &quot;https://www.test4.com<br />
    <br />
    &#39;https://www.test4.com<br />
    <br />
    =&quot;https://www.test4.com</p>
<p>
    &nbsp;</p>
<p>
    <img alt="" src="..." style="width: 500px; height: 375px;" /></p>

(出力例):

<p>
    <a target="_blank" href="www.test1.com">www.test1.com</a><br />
    <br />
    <a target="_blank" href="http://www.test2.com">http://www.test2.com</a><br />
    <br />
    <a target="_blank" href="https://www.test3.com">https://www.test3.com</a><br />
    <br />
    &quot;<a target="_blank" href="https://www.test4.com">https://www.test4.com</a><br />
    <br />
    &#39;<a target="_blank" href="https://www.test4.com">https://www.test4.com</a><br />
    <br />
    =&quot;<a target="_blank" href="https://www.test4.com">https://www.test4.com</a></p>
<p>
    &nbsp;</p>
<p>
    <img alt="" src="<a target="_blank" href="...">...</a>" style="width: 500px; height: 375px;" /></p>

(望ましい出力):

<p>
    <a target="_blank" href="www.test1.com">www.test1.com</a><br />
    <br />
    <a target="_blank" href="http://www.test2.com">http://www.test2.com</a><br />
    <br />
    <a target="_blank" href="https://www.test3.com">https://www.test3.com</a><br />
    <br />
    &quot;<a target="_blank" href="https://www.test4.com">https://www.test4.com</a><br />
    <br />
    &#39;<a target="_blank" href="https://www.test4.com">https://www.test4.com</a><br />
    <br />
    =&quot;<a target="_blank" href="https://www.test4.com">https://www.test4.com</a></p>
<p>
    &nbsp;</p>
<p>
    <img alt="" src="..." style="width: 500px; height: 375px;" /></p>
4

2 に答える 2

1

正規表現を使用してHTMLを処理することは、私の意見では間違ったアプローチです。

それはさておき、正規表現の一致が成功した後にそのルールを追加するだけです。

if(regexResult.Count(c => c =='/')> 2)regexResultに3つ以上の' /'文字が含まれている場合、これは無効な結果です。

問題が解決した場合は、このルールを正規表現パターンに追加できます。

于 2012-05-15T09:21:52.243 に答える
0

これが私にとって問題を解決した正規表現です:

String regex = @"(?<!(""|'))((http|https|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:;,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[A-Z0-9+&@#\/%=~_|$])";

ルックバックネガティブアサーションを使用して、URLの前に開始引用符がないことを確認しました

于 2012-05-17T05:46:27.727 に答える