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

木丸

我有一个正则表达式,除了在一种特殊情况下,它运行良好。

$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)?://)保留为完全匹配项(删除^解决了我的问题,但与后续的regex规则产生了冲突。因此,看起来像问题在于这种完全匹配的情况确实我不希望任何回车,空格或任何在^(http(s)?://://之前)的方法,如何使正则表达式起作用,以使字符串后的内容无关紧要,但是当您看到的正是http或https时适用规则?

迈克尔·伯科夫斯基

如您所知,^锚点要求字符串精确显示在输入字符串的开头。您可以在带有单词边界的输入字符串中的任何位置实现类似的限制\b它与单词开头的零长度字符串匹配-例如,但不包括空格。

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

\bhttps?://...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式匹配模式之间的任何内容

来自分类Dev

正则表达式匹配模式

来自分类Dev

正则表达式模式以匹配{{....}}

来自分类Dev

正则表达式以匹配模式

来自分类Dev

模式匹配 - 正则表达式

来自分类Dev

模式匹配的正则表达式

来自分类Dev

正则表达式匹配任何字符或不匹配?

来自分类Dev

正则表达式:匹配模式,但模式前面除外

来自分类Dev

正则表达式:模式匹配多个模式

来自分类Dev

正则表达式匹配数字的重复模式,后跟任何类型的定界符?

来自分类Dev

正则表达式匹配包含模式2.4.2的任何字符串

来自分类Dev

正向匹配后的正则表达式匹配模式

来自分类Dev

正则表达式匹配正则表达式模式之外的所有内容

来自分类Dev

正则表达式匹配任何字符,包括空格

来自分类Dev

正则表达式可匹配任何垂直空格

来自分类Dev

匹配任何字符串正则表达式

来自分类Dev

以任何顺序匹配正则表达式

来自分类Dev

与任何html标记都不匹配的正则表达式

来自分类Dev

正则表达式,用于匹配任何语言的HashTag

来自分类Dev

正则表达式匹配括号内的任何字符

来自分类Dev

正则表达式-匹配捕获以外的任何内容

来自分类Dev

正则表达式:匹配任何组

来自分类Dev

以任何顺序匹配正则表达式

来自分类Dev

匹配任何字符串正则表达式

来自分类Dev

正则表达式匹配(包括)之间的任何字符{}

来自分类Dev

正则表达式-跨多行匹配任何字符

来自分类Dev

Python正则表达式匹配任何顺序

来自分类Dev

匹配任何主机的 url 的正则表达式

来自分类Dev

正则表达式匹配多个模式