您的位置:

php正则嵌套,php 正则匹配

本文目录一览:

用来匹配多层嵌套的正则在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);

?