php
  • html
  • regex
  • hyperlink
  • 2017-04-21 7 views 0 likes 
    0

    テキストエリアをチェックしたいと思います。ユーザーがテキストエリアにいくつかのリンクを入力すると、phpはリンクに自動的にタグを付けるべきです。私はこのコードを使用しています:PHPの正規表現/ "<a></a>"

    $message = "text with some link within"; 
    
        $url = '@(?!<a[^>]*?>)(http)?(s)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])(?![^<]*?</a>)@'; 
    
    
        if(preg_match($url, $message) == 1){ 
    
        $message = preg_replace($url, '<a href="http$2://$4" target="_blank" rel="nofollow" title="$0">$0</a>', $message); 
    
        } 
    

    問題があり、すでに(「」タグ付き)タグ付きのリンクがありますとき、正規表現は、リンクを破壊しています。ここで

    は一例です:

    テキストエリアからの最初の入力:正規表現によって変更こんにちは.... test.com

    Hello ... <a href="http://test.com" target="_blank" rel="nofollow" title="test.com">test.com</a>

    これが正常に動作していますが、これを更新した場合:

    Hello ... http://test.com" target="_blank" rel="nofollow" title="test.com" target="_blank" rel="nofollow" title="test.com">test.com">test.com">test.com 
    

    ありがとうございました!

    +0

    質問タイトルでは、通常のexperssionがあなたのdescritionでを見つけることを希望します。あなたはURL-sに一致させたいと思います。どちらが必要ですか? :) HTMLコードや生テキストで検索したいですか? – Peter

    +0

    正規表現を使用してHTMLを解析しないでください。DOMパーザライブラリ(DOMDocumentなど)を使用してください。 – Barmar

    答えて

    0

    私はPHPに精通していませんが、これはURL検証のための良いパターンではないかもしれませんが、すでに "a"タグがある場合、テキストは置き換えられません。

    <?php 
    
        $message = array(
         'Hello ... <a href="http://test.com" target="_blank" rel="nofollow" title="test.com">test.com</a>', 
         "Hello .... http://www.test.com ..." 
        ); 
    
        $url = '@(<a[^>]*>[^<]+</a>|((https?://)?[\w\.-]+\.[a-zA-Z]{2,3}[^\s\W]*))@'; 
    
        foreach ($message as $msg) { 
    
         preg_match($url, $msg, $matches); 
    
         if(preg_match($url, $msg) == 1 && count($matches) > 2) { 
    
          $msg = preg_replace($url, '<a href="$0" target="_blank" rel="nofollow" title="$0">$0</a>', $msg); 
    
         } 
    
         echo $msg.PHP_EOL; 
    
        } 
    
        // Output: 
        // Hello ... <a href="http://test.com" target="_blank" rel="nofollow" title="test.com">test.com</a> 
        // Hello .... <a href="http://www.test.com" target="_blank" rel="nofollow" title="http://www.test.com">http://www.test.com</a> ... 
    

    希望します。

    関連する問題