PHP preg_match_all():未知修饰符“>”

时间:2019-03-11 13:23:51

标签: php regex

我正在尝试创建一个正则表达式来过滤PHP中的HTML开头标签

到目前为止,我想到了这种模式/\<[^/>]*\>/。 此模式似乎适用于https://regexr.com/49vgk

但是,一旦我将其复制到PHP中,就会出现此错误: PHP preg_match_all(): Unknown modifier '>'

PHP代码:

$input = '<p>This is my HTML text that I want <b>all</b> opening tags from</p>';

$regexPattern = '/\<[^/>]*\>/';
$openingTags = preg_match_all($regexPattern, $input);

到目前为止,我仍无法弄清楚是什么原因导致了此问题。主要是因为我逃脱了大多数角色。

StackOverflow社区中的某人知道我在做什么错吗?如果可以的话,可以向我解释我在做什么错吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,using regex to parse HTML is evil

现在,这已经不可行了,下面是一个有效的脚本:

$input = '<p>This is my HTML text that I want <b>all</b> opening tags from</p>';
$regexPattern = '/<[^\/][^>]*>/';
preg_match_all($regexPattern, $input, $matches);
print_r($matches[0]);

Array
(
    [0] => <p>
    [1] => <b>
)

以下是<[^\/][^>]*>模式的说明:

<      match an opening bracket
[^\/]  match a single character other than /
[^>]*  then match zero or more non closing bracket characters
>      match a closing bracket

对于您当前的错误,您已将/定义为正则表达式模式的分隔符。这意味着,如果要使用文字正斜杠,则必须将其转义(就像使用正则表达式元字符一样)。