本文目錄一覽:
用來匹配多層嵌套的正則在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);
?
原創文章,作者:VRQA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/132252.html