我将网站从phpBB迁移到D7,附件没有通过。它们包含在论坛正文中。我有bbcode过滤器。想要将[attachment]
的所有实例更改为[img]
并添加php以包含正确的路径。执行此操作的模块是customfilter。
我的例子:
替换
[attachment]photo.jpg[/attachment]
与
[img]http://example.com/files/images/photo.jpg[/img]
我不明白正则表达式和模式似乎不喜欢[]
括号。
任何帮助非常感谢
答案 0 :(得分:0)
我无法帮助您解决网址修复问题,但我可以使用以下内容...
在正则表达式中,方括号:[]
是元字符(用于定义character class)。要匹配目标字符串中的方括号(或任何其他正则表达式字符),您需要使用正则表达式模式中的反斜杠来对其进行转义。因此,要匹配:[tag]
,模式必须为:\[tag\]
。 (实际上,结束方括号在技术上不是元字符,但我还是想逃避它 - 这没有任何伤害,更好地传达了我们打算匹配文字的含义:]
。)
attachment2img()
以下测试的PHP函数将所有:[attachment]file.jpg[/attachment]
标记转换为:[img]file.jpg[/img]
标记。请注意,此功能仅更改内容以.jpg
,.jpeg
,.gif
和.png
结尾的附件标记(仅限于图像文件)。
function attachment2img($text) {
return preg_replace('%
# Match a [attachment]image.jpg[/attachment] construct.
\[attachment\] # ATTACHMENT open tag.
( # $1: ATTACHMENT contents.
[^[\]]+ # Image URL up to extension.
\. # Extension separated with a dot.
(?: # Group of allowed image extensions:
jpe?g # Either a .jpg or .jpeg,
| gif # or a .gif,
| png # or a .png extension.
) # End group of allowed image extensions.
) # End $1: ATTACHMENT contents.
\[/attachment\] # ATTACHMENT close tag.
%ix', '[img]$1[/img]', $text);
}
上面的正则表达式是以自由模式编写的,并且是完全注释的(请注意:模式字符串末尾的'x'标志修饰符)。所有非平凡的正则表达式都应该以这种方式编写,以提高可读性和可维护性。
示例输入:
These should match:
stuff [attachment]simplefile.jpg[/attachment] more stuff.
stuff [attachment]relative/path/file.jpeg[/attachment] more stuff.
stuff [attachment]http://domain.com/path/file.gif[/attachment] more stuff.
These should NOT match:
stuff [attachment]file.zip[/attachment] more stuff.
stuff [attachment]file_jpg[/attachment] more stuff.
stuff [attachment]file.jpg.txt[/attachment] more stuff.
stuff [attachment]file.nonimage[/attachment] more stuff.
示例输出:
These should match:
stuff [img]simplefile.jpg[/img] more stuff.
stuff [img]relative/path/file.jpeg[/img] more stuff.
stuff [img]http://domain.com/path/file.gif[/img] more stuff.
These should NOT match:
stuff [attachment]file.zip[/attachment] more stuff.
stuff [attachment]file_jpg[/attachment] more stuff.
stuff [attachment]file.jpg.txt[/attachment] more stuff.
stuff [attachment]file.nonimage[/attachment] more stuff.
希望这会给你一个良好的开端。