3

逆参照の使い方を理解するのに大きな問題がpreg_replaceあります。

プレーンテキストの文字列があり、すべてのリンクをリンクのHTML構文に置き換えたいと考えています。したがって、「www.mydomain.tld」または「http://www.mydomain.tld」または「http://mydomain.tld」は、HTMLのaタグでラップする必要があります。これをオンラインで実行する機能を見つけましたが、自分でそれを実行する方法を理解したいと思います。

私が見つけた関数では、これは置き換えです:

"\\1<a href=\"http://\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>"

そことこれらのビットにいくつかのエスケープされた引用符があります\\1 \\2
PHPのドキュメントによると、これらは後方参照です。しかし、私はそれらをどのように使用しますか、それらは何をしますか?

スペックにはそれについて何も見つかりませんでしたので、どんな助けでも大歓迎です!

4

2 に答える 2

3

これはあなたのために仕事をします。すべてがどのように機能するかについては、以下を参照してください。

$string = 'some text www.example.com more text http://example.com more text https://www.example.com more text';

$string = preg_replace('#\b(?:http(s?)://)?((?:[a-z\d-]+\.)+[a-z]+)\b#', "<a href='http$1://$2'>http$1://$2</a>", $string);

echo $string; // some text <a href='http://www.example.com'>http://www.example.com</a> more text <a href='http://example.com'>http://example.com</a> more text <a href='https://www.example.com'>https://www.example.com</a> more text

\b単語の境界 (?:http(s?)://)?に一致するオプションで文字列に一致する(含まれている場合)'http://'または'https://'、httpsを取得する場合は、's'正しいURLを作成できるようにします

(?:[a-z\d-]+\.)+一連の文字/数字の1つ以上のオカレンスとそれに続くピリオドに一致する

[a-z]+一連の文字TLDの1つ以上の出現に一致します。TLDは現在購入可能であるため、長さを制限することはできません。http://tinyurl.com/cle6jqbを参照してください

次に、後ろの参照に加えて、最後の2つのセクションの両方を's'括弧で囲んでキャプチャします。

次に、URLを作成します。

<a href='http$1://$2'>http$1://$2</a>

http$1://HTTPSの後方参照にHTTP$1が含まれる場合は、HTTPを作成します。's'

$2ドメイン名が含まれます。URLがリンクテキストになっているリンクを作成します。

于 2013-02-24T01:51:51.423 に答える
1

次のようなものを使用することをお勧めします。

$string = preg_replace('/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ ', "<a href=\"$1\">Link</a>", $yourtext);

いくつかの便利なリンク:
このツールで正規表現を試してください: [正規表現]をクリックし ます。

于 2013-02-24T00:24:28.977 に答える