0

私のウェブサイトには、ユーザーが投稿したものを置き換えるために3つの正規表現があります(1つは無効になっており、その理由は理解できます...)。

1° メールをリンクされたものに置き換える:

$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>",$string);

2° Youtube リンクを埋め込みビデオに置き換えます。

$pattern = '/http:\/\/www\.youtube\.com\/watch\?(.*?)v=([a-zA-Z0-9_\-]+)(\S*)/i';
$replace = '<iframe title="YouTube" class="youtube" type="text/html" width="320" height="240" src="http://www.youtube.com/embed/$2" frameborder="0" allowFullScreen></iframe>';
$string = preg_replace($pattern, $replace, $string);

3° リンクをリンクされたものに置き換えます (これらは無効になっています!):

 /*** make sure there is an http:// on all URLs ***/
$string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$string);
/*** make all URLs links ***/
$string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>",$string);

私の問題は、明らかに、以前の正規表現に置き換えられた後、3番目の代替YouTubeリンクが置き換えられることです(シーケンスの切り替え、YouTubeビデオの中断)

YouTubeパターンを無視してURLを置き換えるために3番目の正規表現を有効にする方法は? ありがとうございました ;-)

4

1 に答える 1

2

これを試して:

// youtube
$string = preg_replace("/\s*[a-zA-Z\/\/:\.]*youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i"," <object width=\"100%\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/$1&hl=en&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><embed src=\"http://www.youtube.com/v/$1&hl=en&fs=1\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" width=\"100%\" height=\"450\"></embed></object>  ",$string);

// email
$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>", $string);

// links
$string = preg_replace("#(^|[\n\s>])([\w]+?://[^\s\"\n\r\t<]*)#is", "\\1<a href=\"\\2\">\\2</a>", $string);
于 2012-05-03T18:04:34.150 に答える