本文目录一览:
用来匹配多层嵌套的正则在php中如何实现
DIV嵌套示例:
div[^]*[\s\S]*?(((?'open'div[^]*)[\s\S]*?)+((?'-open'/div)[\s\S]*?)+)*(?(open)(?!))/div
div我是一层/div
div
div class="test"
我是二层div
div class="test"我是三层div/div
span我是span呀/spanul我是ul呀/ul
/div
/div
对于HTML的解析,最好使用phpQuery类来实现,这个类是基于jQuery语法的。
php 正则表达 一次性子组
1、子组通过圆括号分隔界定,并且它们可以嵌套。
2、使用 (?Pnamepattern) 的语法对子组进行命名
举个例子:
$str = 'foobar\: 2008';
preg_match('/(?Pname.+\\\): (?Pdigit\d+)/', $str, $matches);
/* 下面例子在php 5.2.2(pcre 7.0)或更新版本下工作, 然而, 为了后向兼容, 上面的方式是推荐写法. */
// preg_match('/(?name\w+): (?digit\d+)/', $str, $matches);
print_r($matches);
//++++++++++++++输出++++++++++++++
Array
(
[0] = foobar\: 2008
[name] = foobar\
[1] = foobar\
[digit] = 2008
[2] = 2008
)
php正则表达式html嵌套匹配问题
php的preg正则本身就支持递归吧
(div((?1)|\s)*/div)
用preg_match_all函数是这样写
preg_match_all('{(div((?1)|\s)*/div)}i',$htmltext,$matchs)
这个正则理论上可以匹配到任意层数嵌套的div,为了简化在div之间只能有空格和换行,不能出现其它字符.
解释一下(?1)表示递归引用第一个Group,也就是第一个圆括号的正则
在(?1)的位置可以替换为正则(div((?1)|\s)*/div),然后可以无限递归下去
php如何写正则得出嵌套里的文本?
?php
preg_match_all("|[^]++(.*)/[^]++|U",
"bexample:/bdiv align=leftthis is a test/div",
$out, PREG_PATTERN_ORDER);
print_r($out);
?