我正在尝试创建一个正则表达式来过滤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社区中的某人知道我在做什么错吗?如果可以的话,可以向我解释我在做什么错吗?
谢谢。
答案 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
对于您当前的错误,您已将/
定义为正则表达式模式的分隔符。这意味着,如果要使用文字正斜杠,则必须将其转义(就像使用正则表达式元字符一样)。