我有一些我正在解析的文字:
一些文字。一些文字。一些文字。一些 文本。一些文字。一些文字。一些文字。 一些文字。一些文字。一些文字。一些 文本。一些文字。一些文字。一些文字。 一些文字。一些文字。一些文字。 [附件= 0] Winter.jpg [/附着一些 文本。一些文字。一些文字。一些文字。 一些文字。一些文字。一些文字。一些 文本。一些文字。一些文字。一些文字。 一些文字。
我想从字符串中匹配并删除任何类似文本的实例:
[attachment=0]Winter.jpg[/attachment]
其中Winter.jpg可以是任何文字。
但是,我收到了一些PHP通知。我使用regexpal.com构建它,它在那里工作,但使用Javascript REGEX函数:
\[attachment=.*?].*\[/attachment]
当我运行此代码时:
$pm_row['message_text'] = preg_replace('\[attachment=.*?\].*\[/attachment\]', '', $pm_row['message_text']);
PHP抱怨通知:
[phpBB Debug] PHP Notice: in file /mail_digests.php on line 841: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash
所以在类似的代码行上,我用“/”来划分模式:
$post_row['post_text'] = preg_replace('/\[attachment=.*?].*\[/attachment]/', '', $post_row['post_text']);
但这会产生以下结果:
[phpBB Debug] PHP Notice: in file /mail_digests.php on line 957: preg_replace() [function.preg-replace]: Unknown modifier 'a'
有关如何解决此问题的任何想法?
答案 0 :(得分:3)
您需要escape every occurrence of the delimiter inside the pattern:
如果需要在模式内匹配分隔符,则必须使用反斜杠对其进行转义。如果分隔符经常出现在模式中,最好选择另一个分隔符以提高可读性。
所以逃避它:
'/\[attachment=.*?].*\[\/attachment]/'
^
顺便说一下:目前.*
中的quantifier是贪婪的,这意味着它会尽可能匹配。您可能希望使用?
将其更改为不合适的变体,就像之前一样。
答案 1 :(得分:0)
你需要一个分隔符,如果你实际在你的表达中使用它,你需要逃避它(即:[/attachment]
中有/
。转义它或更改分隔符(例如#
)。
答案 2 :(得分:0)
我想我解决了这个问题。我在示例中的测试数据很糟糕,因此我试图匹配无效模式。