2011-12-31 15 views
0

preg_replacearrayを変更する方法を探しています。preg replace関数とhttp://?

// URLS 
$pattern[1] = '/\[url\=(.*?)\](.*?)\[\/url\]/i'; 
$replace[1] = "<a href=\"http://$1\">$2</a>"; 
// IMAGES 
$pattern[2] = '/\[img\=(.*?)\]/i'; 
$replace[2] = "<img src=\"http://$1\" alt=\"\" />"; 

ので、ユーザはhttp://が含まれている場合、それはそれを追加しません、ユーザーがhttp://を追加しない場合、それはそれを追加します。

ユーザーがhttp://

おかげ

ハッピーニューイヤーを無視した場合、現在それが唯一の作品!

答えて

1

ちょうど(http://)?を追加します。

$pattern[1] = '~\[url\=(http://)?(.*?)\](.*?)\[/url\]~i'; 
$replace[1] = "<a href=\"http://$2\">$2</a>"; 

$pattern[2] = '~\[img\=(http://)?(.*?)\]~i'; 
$replace[2] = "<img src=\"http://$2\" alt=\"\" />"; 

ところで、なぜはすでにパターンではなく、区切り文字として文字を使わないのでしょうか?私はここで~を使ったようです。

+0

これを試してみましょう:) preg_replace '$ input = str_replace( 'http:// http://'、 'http://' 、$ input); 'それはそれほどきれいではありません – cgweb87

0

これにreplaceを使用して/^(?!http:\/\/)/と一致させ、発生を「http://」に置き換えることができます。

+0

アレイの別のセクションとして追加するだけですか? – cgweb87

+0

これはうまくいかないのですか?私はそれをどのように修正したのかをアップロードします... – cgweb87

1

はこれを試してみてください:

// URLS 
$pattern[1] = '/\[url\=([a-z][a-z0-9+\-.]*):(.*?)\](.*?)\[\/url\]/i'; 
$replace[1] = "<a href=\"$1:$2\">$3</a>"; 
// IMAGES 
$pattern[2] = '/\[img\=([a-z][a-z0-9+\-.]*):(.*?)\]/i'; 
$replace[2] = "<img src=\"$1:$2\" alt=\"\" />";