我试图弄清楚如何在两个方括号标签之间获取文本,但不要在第一个结尾处停下来)
__('This is a (TEST) all of this i want') i dont want any of this;
我当前的模式是__\((.*?)\)
这给了我
__('This is a (TEST)
但是我想要
__('This is a (TEST) all of this i want')
谢谢
答案 0 :(得分:1)
您可以使用正则表达式子例程来匹配__
之后的嵌套括号内的文本:
if (preg_match_all('~__(\(((?:[^()]++|(?1))*)\))~', $s, $matches)) {
print_r($matches[2]);
}
请参见regex demo。
详细信息
__
-一个__
子字符串(\(((?:[^()]++|(?1))*)\))
-第1组(将使用(?1)
子例程递归):
\(
-一个(
字符((?:[^()]++|(?1))*)
-第2组捕获了(
和)
以外的任何1个以上字符的0个或更多重复,或者整个第1组模式都被重现\)
-一个)
字符。请参见PHP demo:
$s = "__('This is a (TEST) all of this i want') i dont want any of this; __(extract this)";
if (preg_match_all('~__(\(((?:[^()]++|(?1))*)\))~', $s, $matches)) {
print_r($matches[2]);
}
// => Array ( [0] => 'This is a (TEST) all of this i want' [1] => extract this )
答案 1 :(得分:0)
答案 2 :(得分:0)
使用模式__\((.*)?\)
。
\
会转义括号以捕获文字括号。然后,将捕获该括号内的所有文本。