我有以下PHP preg_replace
$src = preg_replace
(
array(
'/(?si)<p\s+class\s*=\s*"Heading1(.*?)"\s*>(.*?)<\/p>/'
),
array(
"<h1>$2<tocentry content='$2' level='0' /></h1>"
),
$src
);
preg_replace在HTML文档中搜索具有类<p>
的任何Heading1
,并应将其替换为:
<h1>Introduction<tocentry content='Introduction' level='0' /></h1>
然而,我实际得到的是:
<h1>Introduction<tocentry content='span class=' level='0' /></h1>
我正在使用相同的匹配引用('2') - 但是每个都收到不同的结果。怎么会这样?
非常感谢
修改
问题显示在HTML preg_replacing
($src
)中。
<p>
作为孩子有一个<span>
,这导致了奇怪的结果。
我现在使用以下内容,效果很好:
$src = preg_replace
(
array(
'/(?si)<span\s+class\s*=\s*"Heading1-H(.*?)"\s*>(.*?)<\/span>/'
),
array(
"<h1>$2<tocentry content='$2' level='0' /></h1>"
),
$src
);
答案 0 :(得分:0)
$src = <<<EOD
<sometag>Content here content here content here</sometag>
<p class="Heading1stuffstuff">Introduction</p>
<anothertag> More Content. </anothertag>
EOD;
$result = preg_replace (
array(
'/<p\s+class\s*=\s*"Heading1([^"]*)"\s*>([^<]*)<\/p>/si'
),
array(
"<h1>$2<tocentry content='$2' level='0' /></h1>"
),
$src
);
print $result;
/* Outputs:
<sometag>Content here content here content here</sometag>
<h1>Introduction<tocentry content='Introduction' level='0' /></h1>
<anothertag> More Content. </anothertag>
*/
NB 语法突出显示是狡猾的,因为SO不喜欢HEREDOC,但它确实有效...诚实...