我试图写一个匹配嵌套括号的正则表达式,例如:
"(((text(text))))(text()()text)(casual(characters(#$%^^&&#^%#@!&**&#^*!@#^**_)))"
应该匹配这样的字符串,因为所有嵌套的括号都是关闭的,而是:
"(((text)))(text)(casualChars*#(!&#*(!))"
不应该或者更好的是,应该至少匹配第一个“(((text)))(text)”部分.
实际上,我的正则表达式是:
$regex = '/( ( (\() ([^[]*?) (?R)? (\)) ){0,}) /x';
但它并没有像我期待的那样正常工作.如何解决?我哪里错了?谢谢!
当我找到这个答案时,我无法弄清楚如何修改模式以使用我自己的分隔符{}和{}.所以我的方法是让它更通用.
这是一个使用您自己的变量左右分隔符生成正则表达式模式的脚本.
$delimiter_wrap = '~'; $delimiter_left = '{';/* put YOUR left delimiter here. */ $delimiter_right = '}';/* put YOUR right delimiter here. */ $delimiter_left = preg_quote( $delimiter_left,$delimiter_wrap ); $delimiter_right = preg_quote( $delimiter_right,$delimiter_wrap ); $pattern = $delimiter_wrap . $delimiter_left . '((?:[^' . $delimiter_left . $delimiter_right . ']++|(?R))*)' . $delimiter_right . $delimiter_wrap; /* Now you can use the generated pattern. */ preg_match_all( $pattern,$subject,$matches );