2012-01-10 8 views
1

をBBコードへのURLを置き換える:テキストに一つだけのリンクのすべてが1その後、もっとして、素晴らしい作品ときプリプレグ試合、私はプリプレグ一致ルールの書き込み

$subject = 'text <a href="http://google.com">LINK</a> text text <a href="http://google2.com">LINK2</a>'; 

$search = array(
    '/\<a href\="(.*)\">(.*)\<\/a\>/i' 
); 

$replace = array(
    "[a href=\"$1\"]$2[/a]" 
); 

echo preg_replace($search, $replace, $subject); 

を - crachコード

この私がもっとあるときに取得 "テキスト[のhref =" http://google.com ">リンクテキストテキスト" 貪欲 not-マッチングを行うための'/\<a href\="(.*?)\">(.*?)\<\/a\>/i'

答えて

2

変更:1つのリンクより。ここで

0

が良い正規表現だ - それは、タグ内の余分なフィールドを扱う:

\<a (?:.*?)href\=[\"\']([^\"\']+?)[\"\'][^\>]*?\>(.+?)\<\/a\> 

私はそこでの特殊文字のすべてを脱出したと思う、私はPHPが「特別な」と考えるかわからないんだけどしかし、基本的にはこれは、次のすべてに一致する必要があります

$subject = 'text <a id="test" href="http://google.com">LINK</a> text text <a href="http://google2.com" id="test">LINK2</a> text <a href="http://google3.com">LINK3</a>'; 

をまた、私はPHPについては知らないが、Perlで複数のリンクを一致させるためには、その正規表現の末尾に/ gの修飾子を必要とします、そう:

$search = array(
     '/\<a (?:.*?)href\=[\"\']([^\"\']+?)[\"\'][^\>]*?\>(.+?)\<\/a\>/ig' 
); 

が検索されます。たぶんpreg_replaceはこれを実行しているかもしれませんが、ターゲットテキストのインスタンスを1つだけ置き換えたいときがあるので、私は驚いています。

関連する問題