Php preg_match_all-正则表达式的贪婪部分,但最大化匹配数
我需要解析以下html:Php preg_match_all-正则表达式的贪婪部分,但最大化匹配数,php,regex,preg-match-all,regex-greedy,Php,Regex,Preg Match All,Regex Greedy,我需要解析以下html: <h1 class="x">test</h1> <p>some text <img src="x" /></p> <h1 class="x1">test2</h1> <p>some text </p> <h1 class="2">test3</h1> <p>some text <img src="x" /><
<h1 class="x">test</h1>
<p>some text <img src="x" /></p>
<h1 class="x1">test2</h1>
<p>some text </p>
<h1 class="2">test3</h1>
<p>some text <img src="x" /></p>
测试
一些文本
测试2
一些文本
测试3
一些文本
我可以用一个正则表达式将其解析为一个数组吗
我试过了
preg_match_all('#(<h1[^>]*?>)(.*?)(</h1>)(.*)#ism',$html,$arr);
preg#u match_all('#(]*?>)(.*)(.*)#ism',$html,$arr);
这只给了我一个条目,因为正则表达式的最后一部分是贪婪的
preg_match_all('#(<h1[^>]*?>)(.*?)(</h1>)(.*?)#ism',$html,$arr);
preg#u match_all('.#(]*?>)(.*)(.*)(.*)#ism',$html,$arr);
这没有给我任何关于
之间HTML的信息,因为表达式不是贪婪的
如何在匹配尽可能多的事件的同时,使匹配后的零件变得贪婪
补充意见:
- 这个问题相当学术化,我已经使用pre_split和其他各种方法解决了这个问题,但也可能有缺点(例如DOM可能无法处理我无法控制的无效HTML)。然而,这是一个反复出现的问题,我有兴趣了解更多
- 你需要某种形式的终端制造商。正则表达式无法猜测要匹配的部分
在这种情况下,可能是在结尾处的
(.*)
之后出现一个前瞻性断言:
(?=<h1|</body>|\z)#ims
(?=您需要某种形式的终端生成器。正则表达式无法猜测您要匹配的部分
在这种情况下,可能是在结尾处的(.*)
之后出现一个前瞻性断言:
(?=<h1|</body>|\z)#ims
(?=忽略关于regex如何不合适的注释,因为这仍然是一个有趣的问题,有两种方法可以解决这个问题:贪婪和懒惰
模式的各个部分是:
- Lazy:
*?(?=忽略关于regex如何不合适的注释,因为这仍然是一个有趣的问题,有两种方法可以解决这个问题:贪婪和懒惰
模式的各个部分是:
- 懒惰:
*?(?=为什么不直接使用?感谢您的快速回答。足够公平。preg_match_中正则表达式的贪婪性可以得到管理,以便找到最多的匹配项?为什么不直接使用?感谢您的快速回答。足够公平。preg_match_中正则表达式的贪婪性可以得到管理,从而找到最多的匹配项吗?太棒了,准确这正是我想要的你想要的=