drupal定制过滤器模块 - 更换模式

时间:2013-09-07 02:48:18

标签: regex drupal filter

我将网站从phpBB迁移到D7,附件没有通过。它们包含在论坛正文中。我有bbcode过滤器。想要将[attachment]的所有实例更改为[img]并添加php以包含正确的路径。执行此操作的模块是customfilter

我的例子:

替换

[attachment]photo.jpg[/attachment]

[img]http://example.com/files/images/photo.jpg[/img]

我不明白正则表达式和模式似乎不喜欢[]括号。

任何帮助非常感谢

1 个答案:

答案 0 :(得分:0)

我无法帮助您解决网址修复问题,但我可以使用以下内容...

使用正则表达式匹配方括号

在正则表达式中,方括号:[]元字符(用于定义character class)。要匹配目标字符串中的方括号(或任何其他正则表达式字符),您需要使用正则表达式模式中的反斜杠来对其进行转义。因此,要匹配:[tag],模式必须为:\[tag\]。 (实际上,结束方括号在技术上不是元字符,但我还是想逃避它 - 这没有任何伤害,更好地传达了我们打算匹配文字的含义:]。)

PHP函数: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.

希望这会给你一个良好的开端。