繁体   English   中英

PHP和preg_replace

[英]PHP and preg_replace

我有一些文本正在这样解析:

一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 [attachment = 0] Winter.jpg [/ attachment]有些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。 一些文字。

我想匹配并从字符串中删除任何这样的文本实例:

[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'

关于如何解决此问题的任何想法?

您需要转义模式中每次出现的定界符

如果定界符需要在模式内匹配,则必须使用反斜杠对其进行转义。 如果定界符经常出现在模式中,则最好选择另一个定界符以提高可读性。

所以逃脱它:

'/\[attachment=.*?].*\[\/attachment]/'
                       ^

顺便说一句:当前.*量词是贪婪的,这意味着它将尽可能地匹配。 您可能想使用?将其更改为不适合的变体? 像以前一样

您需要一个定界符,如果您实际上在表达式中使用它,则需要对其进行转义 (即: [/attachment]中包含/ )。 转义它或更改定界符(例如# )。

我想我解决了。 该示例中的测试数据不正确,因此我试图匹配无效的模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM