PHP:PrimgMatMath都把两个相等的匹配看作一个

PHP:PrimgMatMath都把两个相等的匹配看作一个,php,Php,我想从字符串(实际上是HTML)中提取一些数据。我搜索了一下,找到了preg_match_all。问题是,如果有两个相等的匹配项,函数会将它们视为两个,并为两者留出空间。我的代码、代码的输出和代码的预期输出将清楚地解释 <?php $html = " <!doctype html> <html lang=\"en\"> <head> <meta charset=\"UT

我想从字符串(实际上是HTML)中提取一些数据。我搜索了一下,找到了preg_match_all。问题是,如果有两个相等的匹配项,函数会将它们视为两个,并为两者留出空间。我的代码、代码的输出和代码的预期输出将清楚地解释

<?php
    $html = "
        <!doctype html>
        <html lang=\"en\">
        <head>
            <meta charset=\"UTF-8\">
            <title>Document</title>
        </head>
        <body>
            <img src=\"[profileLink@user:0]\" />
            <img src=\"[profileLink@user:0]\" />
        </body>
        </html>
    ";
    $regex = "/\[(.*?)@(.*?)\]/";
    preg_match_all($regex, $html, $matches);
    var_dump($matches);
?>
预期输出:

array (size=3)
  0 => 
    array (size=2)
      0 => string '[profileLink@user:0]' (length=20) // It looks ok
      1 => string '[profileLink@user:0]' (length=20) // Don't want it.
  1 => 
    array (size=2)
      0 => string 'profileLink' (length=11) // It looks ok
      1 => string 'profileLink' (length=11) // Don't want it.
  2 => 
    array (size=2)
      0 => string 'user:0' (length=6) // It looks ok
      1 => string 'user:0' (length=6) // Don't want it.
array (size=3)
  0 => 
    array (size=1)
      0 => string '[profileLink@user:0]' (length=20)
  1 => 
    array (size=1)
      0 => string 'profileLink' (length=11)
  2 => 
    array (size=1)
      0 => string 'user:0' (length=6)
使用而不是
preg\u match\u all
,结果将是:

array(3) {
  [0]=>
  string(20) "[profileLink@user:0]"
  [1]=>
  string(11) "profileLink"
  [2]=>
  string(6) "user:0"
}

这就是
preg\u match\u all
所做的。当你有了你的结果阵列,你可以很容易地移除重复。不,这会更痛苦。我想我必须坚持乔纳森的建议。顺便说一句,谢谢您的努力。@MuhammedTalhaAkbar好吧,根据您的问题示例,它似乎消除了“痛苦”,但在您的正确代码中可能会有所不同。