我在PHP预匹配中出错。内容约束[^>;]*?

我在PHP预匹配中出错。内容约束[^>;]*?,php,regex,Php,Regex,几乎,当我用preg_match.编写代码时,就像这样 $string = <<<ETO <svg "[^>]*? width="480.24px" height="360px" viewBox="0 0 480.24 360" enable-background="new 0 0 480.24 360" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http

几乎,当我用preg_match.编写代码时,就像这样

    $string = <<<ETO
    <svg "[^>]*? width="480.24px" height="360px" viewBox="0 0 480.24 360" enable-background="new 0 0 480.24 360" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    ETO;

    preg_match('/<svg[^>]*?width=[\'|"]{1}(.*?)[\'|"]{1}[^>]*?>/is', $string, $svginfo);
$string=]*?
不应出现在svg中。 但是当有人发布这篇文章时,我需要从这篇文章中获取宽度信息

有人能解释一下怎么做吗?

在一台计算机上测试,它告诉我:

\\ matches the character \ literally (case insensitive)
1 matches the character 1 literally (case insensitive)

如果我在字符串的中间使用<代码> 1 ,它表示:

\1 matches the same text as most recently matched by the 1st capturing group
这意味着您将找到匹配的结束报价,这似乎是您想要做的

哦,还有


更新:

啊,这就是Zalgo的问题。问题是您希望确保不跳过整个
标记,从而拒绝
width=“99”
。一个简单有效的HTML模式是:

<svg name=">" width="42">


用正则表达式捕捉这种和类似的变体很快就会失控;正确的方法是使用HTML解析器;这是。

我想您需要添加一些转义[^>]*?在$string中。这只是一个意外。我必须从
$string
中删除
[^>]*?
以获得匹配-如果您不想删除,请编辑问题。显示真实问题,或者不要删除[^>]*?从$string将匹配ok。这只是一个例子,还有更多。当用户发布这样的内容时,您需要对内容执行一些preg。如何执行此操作?我遇到此错误。因为在preg_match中,我使用“作为分隔符,所以我写入\\1。当我使用单引号时\1是确定的,也许您可以使用此]*?宽度=['|“]{1}(.*?['|“]{1}[^>]*?>对不起,我是中国人,英语很差。请原谅我是的,虽然它也会匹配不匹配的引号,例如
width=“480.24px”
将被接受。好的,我会更新。我已经更新了这个问题。主要问题是为什么$string包含[^>]*时无法匹配信息?