既然行号对你很重要,而不是 div 的实际内容,我倾向于根本不使用正则表达式。我可能会将字符串 explode()
成一个数组,并通过循环查找标记。就像这样:
<?php
$myContent = "[your string of html here]";
$myArray = explode("\n", $myContent);
$arraylen = count($myArray);
$lineNo = 0;
for($i = 0; $i < $arraylen; $i++)
{
$pos = strpos($myArray[$i], 'id="Alpha"');
if($pos !== false)
{
$lineNo = $i+1;
break;
}
}
?>
免责声明:我没有一个可用的PHP安装程序来测试这个,所以可能需要一些调试。
希望这可以帮助您,因为我认为实现解析引擎只是为了做一些如此简单的事情,特别是如果它只是一次性的话,那么这只会浪费您的时间。
编辑:如果内容对您现阶段也很重要,那么您可以结合其他答案提供的适当正则表达式来使用它。
编辑2:哦,算了吧...这是我的两分钱:
"/<div.*?id=\"Alpha\".*?>.*?(<div.*//div>)*.*?//div>/m"
在编程中,(<div.*//div>)
告诉正则表达式引擎可以找到嵌套的 div 标签,并将它们合并到匹配结果中,而不仅仅停在第一个 </div>
上。然而,这只解决了单层嵌套的问题。如果有更多层次的嵌套,那么正则表达式就无法胜任了,抱歉 :(。
/m
还让正则表达式引擎忽略换行符,因此你不必在表达式中到处添加 [\S\s]
。
再次抱歉,目前我没有测试环境,所以你可能需要进行调试。
祝好
Iain