0

使用 php 和正则表达式,我试图<li>Valid in US</li>在 lastUL之后添加 lastLI或简单地放在 last 之后LI

调试时我什至无法获得最后一个UL标签的内容。当我执行 var_dump 时,这段代码什么也没有显示(我也尝试过preg_match_all):

if (preg_match("/((<ul>(.*?)<\/ul>/s){3})", $desc, $WARRANTY) == true)
var_dump($WARRANTY);

这是以下内容$desc

<h1>Stuff</h1>
<p>description</p>
<hr />
<strong>Features &amp; Benefits</strong>
<ul>
  <li>feat</li>
  <li>feat</li>
  <li>feat</li>
</ul>
<hr />
<strong>Specifications</strong>
<ul>
  <li>spec</li>
  <li>spec</li>
  <li>spec</li>
</ul>
<hr />
<strong>Warranty Information for a certain product</strong>
<ul>
  <li>3 Years Parts</li>
  <li>3 Years Labor</li>
</ul>
<div> <a href="/ahref" target="_blank">See more products from MFG </a></div>
4

2 回答 2

1

这不使用正则表达式,并且非常hacky,但是可以。

if($pos = strripos($desc, '</ul>')) {
    $desc= substr_replace($desc, "<li>Valid in US</li>\n</ul>" , $pos, strlen($desc));
}

echo $desc;
于 2012-04-30T15:26:15.683 回答
1

如果你想匹配<ul>标签中只有 2 个<li>标签,你可以使用这个正则表达式:

<ul>\s*(<li>[^<]+</li>\s*){2}</ul>

我可以建议另一种添加第三个 li 标签的 hacky 方式:

  • 使用这个正则表达式:

    <ul>\s*(?:<li>[^<]+</li>\s*){2}(<)/ul>

  • 并将第一组中的匹配替换为您的<li></li>内容,后跟<- 因为这是该组已捕获的内容(<)

于 2012-04-30T15:46:49.970 回答