正则表达式第三次出现<ul> </ul>

时间:2012-04-30 15:15:36

标签: php regex

使用php和Regex我试图在最后<li>Valid in US</li>之后的UL中添加LI,或者只是放在最后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>

2 个答案:

答案 0 :(得分:1)

这不使用正则表达式,而且非常hacky,但有效。

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

echo $desc;

答案 1 :(得分:1)

如果您想将<ul>代码与其中只有2个<li>代码匹配,则可以使用此正则表达式:

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

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

  • 使用此正则表达式:

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

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

    <已捕获的内容/ LI>