给出这一串文字:
$myString = '<details class="myEl" open="open">
<summary>In this article</summary>
<ol>
<li><a href="post-slug/">Introduction</a></li>
<li><a href="post-slug/2/">Title for the second page</a></li>
<li><a href="post-slug/3/">Title for the third page</a></li>
</ol>
</details>';
如果我认为搜索的匹配是“/ 2 /”,那么正则表达式会为“第二页的标题”拉什么?
如果匹配为“/ 3 /”,我还需要拉“第三页的标题”,所以我需要一个通用的正则表达式来拉取&gt;之间的字符串。和&lt;比赛结束后。
答案 0 :(得分:2)
试试这个:
preg_match('!\/' . $pageNo . '\/">(.*?)\<\/a\>!', $myString, $matches);
$pageTitle = $matches[1];
编辑: 第1页应该使用这个:
preg_match('!\/' . ($pageNo == 1 ? ($pageNo . '\/') : '') . '">(.*?)\<\/a\>!', $myString, $matches);
$pageTitle = $matches[1];
答案 1 :(得分:0)
我认为使用XPath制作这样的东西会更好,例如:
$str = '<details class="myEl" open="open">
<summary>In this article</summary>
<ol>
<li><a href="post-slug/">Introduction</a></li>
<li><a href="post-slug/2/">Title for the second page</a></li>
<li><a href="post-slug/3/">Title for the third page</a></li>
</ol>
</details>';
$xml = simplexml_load_string($str);
var_dump($xml->xpath('//details/ol/li/a[contains(@href, "/3/")]'));
但是关于正则表达式,以下正则表达式可以完成这项工作:
preg_match_all('@<li><a href="post-slug/3/">((?:(?!<\/a>).)+)</a></li>@', $str, $matches);
print_r($matches);