我需要找到跟随字符串的正则表达式,并获得所有制表符父:
{jmstabs type="horizontal" theme="two" nav="left"}
[tab title="Tab title 1"]Tab content 1[/tab]
[tab title="Tab title 2"]Tab content 2[/tab]
[tab title="Tab title 3"]
{jmstabs}
[tab title="Tab child 1"]Tab child 1[/tab]
[tab title="Tab child 2"]Tab child 2[/tab]
{/jmstabs}
[/tab]
{/jmstabs}
我想得到preg_match_all后的结果:
1. [tab title="Tab title 1"]Tab content 1[/tab]
2. [tab title="Tab title 2"]Tab content 2[/tab]
3. [tab title="Tab title 3"]
{jmstabs}
[tab title="Tab child 1"]Tab child 1[/tab]
[tab title="Tab child 2"]Tab child 2[/tab]
{/jmstabs}
[/tab]
请帮帮我!谢谢大家。
你可以使用这个模式:
(?(DEFINE)
(?<item>'s*(?:(?&curly)|(?&square))|[^'['{]*)
(?<attr>'s+'w+="[^"]*")
(?<curly>'{('w+)(?&attr)*'}(?&item)*'{'/'w+'})
(?<square>'[('w+)(?&attr)*'](?&item)*'['/'w+'])
)'[tab(?&attr)*'](?&item)*'['/tab']
在线演示。
感谢@Rawing的正则表达式模式;下面是如何使用它们。和…顺便说一下;您可以在这里查看演示:
<?php
$str = '{jmstabs type="horizontal" theme="two" nav="left"}
[tab title="Tab title 1"]Tab content 1[/tab]
[tab title="Tab title 2"]Tab content 2[/tab]
[tab title="Tab title 3"]
{jmstabs}
[tab title="Tab child 1"]Tab child 1[/tab]
[tab title="Tab child 2"]Tab child 2[/tab]
{/jmstabs}
[/tab]
{/jmstabs}';
preg_match_all("#(?(DEFINE)
(?<item>'s*(?:(?&curly)|(?&square))|[^'['{]*)
(?<attr>'s+'w+='"[^'"]*'")
(?<curly>'{('w+)(?&attr)*'}(?&item)*'{'/'w+'})
(?<square>'[('w+)(?&attr)*'](?&item)*'['/'w+'])
)'[tab(?&attr)*'](?&item)*'['/tab']#", $str, $matches);
var_dump( $matches[0] );
// PRODUCES:::
array (size=3)
0 => string '[tab title="Tab title 1"]Tab content 1[/tab]' (length=44)
1 => string '[tab title="Tab title 2"]Tab content 2[/tab]' (length=44)
2 => string '[tab title="Tab title 3"]
{jmstabs}
[tab title="Tab child 1"]Tab child 1[/tab]
[tab title="Tab child 2"]Tab child 2[/tab]
{/jmstabs}
[/tab]' (length=211)