添加任何模式以匹配正则表达式

时间:2014-05-17 19:55:56

标签: php regex

我有一个正常的正则表达式,除了在一个特定的情况下;

$message = preg_replace("#(^(http(s)?://)(?!img.youtube.com/vi/)([-a-zA-Z?-??-?()0-9@:%_+.~\#?&;//=,]+(\.jpg|\.jpeg|\.gif|\.bmp|\.png)))#i", 
"<p><a href='/viewpost.php?messageid=$message_id'><img src='$1' width=100%></a>", $message);

这种模式可以做几件事,1)它完全匹配http或https,2)它忽略包含img.youtube.com/vi/的任何字符串,3)它在链接中查找流行的图像文件类型。只有当它们在刺痛之前没有角色时才会起作用(像http://exampleaddress/exampleimage.jpeg这样的刺痛)。如果字符串位于段落的中间,则会失败。

我需要保持^(http(s)?://)作为完全匹配(删除^修复我的问题,但导致与后续正则表达式规则冲突。所以,看起来问题是这个确切匹配情况不希望任何回车,空格或任何东西在^(http(s)?://)之前。如何使正则表达式工作,以便在字符串之后没有任何内容相关,但是当你看到确切的http或https应用规则?

1 个答案:

答案 0 :(得分:1)

如您所知,^锚点要求字符串恰好出现在输入字符串的开头。您可以使用\b字边界在输入字符串内实现类似的限制任何地方。它匹配单词开头的零长度字符串 - 例如,之后但不包括空格。

我还要注意,您不需要在s组中包围(),因为?只会匹配前一个字符。

\bhttps?://...
相关问题