[英]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.