0

regexテキストの前にある場合、プレーンテキストをURLに変更するために使用しhttp://ています。これは問題なく動作しますが、このリンクがinternal(つまり、私の Web サイト名を含むリンク) である場合はリンクにしたくないので、外部リンクの場合にのみ発生させたいと考えています。

どうやってやるの?http の前にa を追加しようとしました!が、うまくいきませんでした。誰か助けてくれませんか?これは私が使用しているものです:

function wpse107488_urls_to_links( $string ) {

   $string = preg_replace( "/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2", $string );

    $string = preg_replace( "/([\w]+:\/\/[\w-?&;%#~=\.\/\@]+[\w\/])/i", "<a target=\"_blank\" title=\"" . __( 'Visit Site', 'your-textdomain' ) . "\" href=\"$1\">$1</a>", $string);

    return $string;
}

編集:内部リンクからもリンクを作成する別の機能を使用していますが(そうであるはずです)、これら2つの機能が互いにブロックしていると思います。そのため、すべての内部リンクにクラスを与えました。これらのクラスを使用してそれらを除外できますか?

4

2 に答える 2

0

URL を検出するための非常に一般的なパターン * の例として、ドメイン名に否定先読み(?!..) (後に続かない)を追加できます。

$string = preg_replace('~\bhttps?://(?:www\.)?(?!mydomain.com)[^\s/]+(?:/[^\s/]+)*/?~i',
                       '<a href="$0">$0</a>', $string );

* これは、URL パターンに時間を費やしていないことを意味します。より良いパターンを見つけたら、変更してください。ドメインを除外する方法を説明するだけです。

于 2013-07-24T14:05:08.460 に答える