我知道我可以在PHP中使用正则表达式来替换该术语的动态部分:
preg_replace('/(test1)(test2)(test3)/',"$3$2$1",$string);
(不知怎的,我不知道这是否正确,但它不是我想要的)
我希望在正则表达式中,例如:
preg_match_all("~<(.*)>.*</$1>~",$string,$matches);
“&lt;”之间的第一部分和“&gt;”是动态的(因此可以找到html中存在的每个标签,甚至可以找到自己的xml标签),我想在同一个正则表达式中再次引用它。
但它对我不起作用。这甚至可能吗? 我有一台PHP 5.3的服务器
/编辑:
我的最终目标是:
如果有一个带有e的html页面。 G。以下源代码: HTML
<html>
<head>
<title>Titel</title>
</head>
<body>
<div>
<p>
p-test<br />
br-test
</p>
<div>
<p>
div-p-test
</p>
</div>
</div>
</body>
</html>
处理后应该看起来像
$htmlArr = array(
'html' => array(
'head' => array('title' => 'Titel'),
'body' => array(
'div0' => array(
'p0' => 'p-test<br />br-test',
'div1' => array(
'p1' => 'div-p-test'
)
)
)
));
答案 0 :(得分:1)
替换字符串中的占位符使用$1
语法。在正则表达式本身中,它们被称为反向引用,并遵循语法\1
反斜杠和数字
http://www.regular-expressions.info/brackets.html
所以在你的情况下:
preg_match_all("~<(.*?)>.*?</\\1>~",$string,$matches);
反斜杠在这里加倍,因为在PHP字符串中,反斜杠会自行转义。 (特别是对于双引号字符串,否则它将成为ASCII符号。)