1
我有兩個preg_match語句可以自己查找,但是當我使用它們時,第二個語句會打破第一個語句;排除preg_match中的字符串
$message = preg_replace("!(http(s)?://(www\.|m\.)?(youtu\.be/|youtube\.com/watch\?v=)([-|~_0-9A-Za-z]+))!",
"<p><a href= '/viewpost.php?messageid=$message_id'><img src='http://img.youtube.com/vi/$5/0.jpg' width='536' border='1'></a><p>", $message);
$message = preg_replace("!(((f|ht)tp(s)?://)[-a-zA-Z?-??-?()[email protected]:%_+.~#?&;//=]+)!i", "<a href='$1' target='_blank' STYLE='TEXT-DECORATION: NONE'><b>$1</b></a>",
$message);
我最近張貼了這個並獲得建立陣列來的模式和條件,然後在一個單一的preg_match聲明一起將他們的建議,但是這似乎並沒有解決問題(儘管代碼看起來更好)。
我的想法是在第二個語句中設置一個模式,它將排除在第一個語句中找到的模式(在本例中爲「youtube.com/」和「youtu.be/」),但我不能讓它工作;
$message = preg_replace("!(http(s)?://(www\.|m\.)?(youtu\.be/|youtube\.com/watch\?v=)([-|~_0-9A-Za-z]+))!",
"<p><a href= '/viewpost.php?messageid=$message_id'><img src='http://img.youtube.com/vi/$5/0.jpg' width='536' border='1'></a><p>", $message);
$message = preg_replace("!(((f|ht)tp(s)?://)/^(?\!\youtube\.|youtu\.be/)[-a-zA-Z?-??-?()[email protected]:%_+.~#?&;//=]+)!i", "<a href='$1' target='_blank' STYLE='TEXT-DECORATION: NONE'><b>$1</b></a>",
$message);
我覺得我已經接近找到一種方法,但我沒有抓住一些東西。
這完全解決了這個問題。謝謝彼得,我很欣賞這個指導。 – Kimomaru