PHP:PrimgMatMath都把两个相等的匹配看作一个
我想从字符串(实际上是HTML)中提取一些数据。我搜索了一下,找到了preg_match_all。问题是,如果有两个相等的匹配项,函数会将它们视为两个,并为两者留出空间。我的代码、代码的输出和代码的预期输出将清楚地解释PHP:PrimgMatMath都把两个相等的匹配看作一个,php,Php,我想从字符串(实际上是HTML)中提取一些数据。我搜索了一下,找到了preg_match_all。问题是,如果有两个相等的匹配项,函数会将它们视为两个,并为两者留出空间。我的代码、代码的输出和代码的预期输出将清楚地解释 <?php $html = " <!doctype html> <html lang=\"en\"> <head> <meta charset=\"UT
<?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好吧,根据您的问题示例,它似乎消除了“痛苦”,但在您的正确代码中可能会有所不同。