Php 是否匹配不在一组URL类型中的URL?
我正在尝试将不是图像或YouTube视频的URL替换为以下内容:Php 是否匹配不在一组URL类型中的URL?,php,regex,regex-negation,Php,Regex,Regex Negation,我正在尝试将不是图像或YouTube视频的URL替换为以下内容: preg_replace('#(http://([^\s]*)(?<!\.(?:jpg|gif|png))(?<!youtube\.com/watch\?v=\w{11}))#', '<a href = $1> $1 </a>', $output); preg\u replace('#)(http://([^\s]*)(?您正在使用的[\s]*延迟匹配非空间字符。但是,如果以下断言不匹配,它将
preg_replace('#(http://([^\s]*)(?<!\.(?:jpg|gif|png))(?<!youtube\.com/watch\?v=\w{11}))#', '<a href = $1> $1 </a>', $output);
preg\u replace('#)(http://([^\s]*)(?您正在使用的[\s]*
延迟匹配非空间字符。但是,如果以下断言不匹配,它将回溯。因此,您必须将其设为占有
使用\S*+
执行此操作。其中\S
表示所有非空格字符(与[^\S]
相同,但更简洁)。并且*
量词后面的+
避免了在断言失败时PCRE以字符方式收回字符
另见
此外,您最好将视频断言移动到http://
与(?!youtube)
部分之后,而不是从后面进行匹配。youtube链接中可能有其他URL参数,因此只需匹配到/watch