preg_match_all() [function.preg-match-all]: 未知修饰符']'。

7

使用几种不同的模式,但它们都出现了这个错误 - 那么问题出在哪里呢?

我最容易诊断的模式是:

$pattern = "<img([^>]*[^/])>";
preg_match_all($pattern, $subject, $matches);

谢谢

2个回答

11

您缺少正则表达式的分隔符。尝试使用:

$pattern = "#<img([^>]*[^/])>#i";

1
很好。请看一下Waquo的回答,他在其中更详细地解释了这个问题。我选择使用非斜杠分隔符,因为我讨厌转义。 - PEZ

9

单个斜杠是默认分隔符,这就是为什么在您原始的正则表达式中,它后面的字符会出现错误信息。 使用传统的斜杠作为分隔符,并转义不是分隔符的斜杠,应该像这样:

$pattern = "/<img([^>]*[^\\/])>/";

错误是由另一个]引起的。PHP将第一个字符'<'作为开头分隔符,然后正则表达式在第一个'>'处“停止”。因此,正是在第一个'>'之后的']'导致了该错误消息。 - Gareth
啊,我讨厌分隔符。在一个字符串字面量自然地分隔正则表达式的语言中,它们真的没有存在的必要。 - Waquo
我不太同意。能够选择分隔符可以避免反斜杠症。 - PEZ
1
只使用“pattern”而不是“/pattern/”或“#pattern#”就足够了。“"是一个完全可以接受的分隔符。修饰符可以放在单独的参数中。分隔符在Perl中很有意义,因为正则表达式是语言语法的一部分,而不是字符串的一部分。 - Waquo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接