Php preg_替换捕获组检查
我正在尝试向phpfusion应用程序添加一个新的bbcode。我正在使用preg_替换。代码如下:Php preg_替换捕获组检查,php,regex,preg-replace,Php,Regex,Preg Replace,我正在尝试向phpfusion应用程序添加一个新的bbcode。我正在使用preg_替换。代码如下: $text = preg_replace( "#\[gameimg( float:(left|center|right))?\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/gameimg\]#sie", "'<span style=\"display: block; max
$text = preg_replace(
"#\[gameimg( float:(left|center|right))?\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/gameimg\]#sie",
"'<span style=\"display: block; max-width: 350px; margin: 0 0 5px 5px; $1\"><img src=\"'
. (strlen('$3') > 0 ? '$3' : BASEDIR.GAMESDIR)
. '$5$6\" alt=\"$5$6\" style=\"border:0px; max-width: 350px;\" /></span>'",
$text
);
$text=preg\u replace(
“#\[gameimg(float:(左|中|右))?\]((http | ftp | https | ftps):/)(.*?)(\((jpg | jpeg | gif | png | jpg | gif | png))\[/gameimg\],
“'0''$3”:BASEDIR.GAMESDIR)
“$5$6\”alt=\“$5$6\”style=\”边框:0px;最大宽度:350px;\“/>”,
$text
);
如果我提供一个绝对url(例如[gameimg]http://localhost/dirname/file.jpg[/gameimg])一切正常,图片按预期显示。但是如果我使用相对url([gameimg]dirname/file.jpg[/gameimg])忽略protokol和主机名我希望将basedir.gamedir常量附加到给定的url,但它根本不起作用,它不需要任何替换就打印出原始bbcode,而不是图像。我做错了什么?这里有几件事:
- 这是一个巨大的
调用。也许您可以将此问题分解为更小的部分,以便更容易理解/维护preg_replace
- 您正在使用“忽略大小写”修饰符(
),但您有类似i
。这是多余的(jpg | jpg)
- 你的问题是为什么
标签没有[gameimg]
不匹配。这是因为正则表达式中需要http://..
。您应该通过添加((http | ftp | https | ftps):/)
使此部分成为可选部分,如下所示:?
((http | ftp | https | ftps)://)?
- 这是一个巨大的
调用。也许您可以将此问题分解为更小的部分,以便更容易理解/维护preg_replace
- 您正在使用“忽略大小写”修饰符(
),但您有类似i
。这是多余的(jpg | jpg)
- 你的问题是为什么
标签没有[gameimg]
不匹配。这是因为正则表达式中需要http://..
。您应该通过添加((http | ftp | https | ftps):/)
使此部分成为可选部分,如下所示:?
((http | ftp | https | ftps)://)?
- 这里有几件事: