我正在尝试编写一个匹配嵌套括号的正则表达式,例如:
"(((text(text))))(text()()text)(casual(characters(#$%^^&&#^%#@!&**&#^*!@#^**_)))"
这样的字符串应该匹配,导致所有嵌套括号都被关闭,而是:
"(((text)))(text)(casualChars*#(!&#*(!))"
不应该或更好地至少匹配第一个“(((text)))(text)”部分。
实际上,我的正则表达式是:
$regex = '/( ( (\() ([^[]*?) (?R)? (\)) ){0,}) /x';
但这并不能像我期望的那样正常工作。如何解决?我哪里错了?谢谢!
当我找到此答案时,我无法弄清楚如何修改模式以使用自己的定界符where {和}。所以我的方法是使其更通用。
{
}
$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 );