Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取括号内的文本是否包含带有更多括号的文本?_Php_Regex_Preg Match - Fatal编程技术网

Php 获取括号内的文本是否包含带有更多括号的文本?

Php 获取括号内的文本是否包含带有更多括号的文本?,php,regex,preg-match,Php,Regex,Preg Match,我有一个变量: $str = "i do not need this datavar(i need this (also this) and this) i do not need this"; 我有下面的表达式,但只返回第一个Phanteses之前的内容,我需要所有内容,直到最后一个或第二个Phanteses $regex2 = '#(datavar\([^)]+\))#'; 是否有一种方法可以将文本中的所有内容都包含在第二个括号内并完成匹配(它可以包含更多内容)。您可以在第二个右括号或最

我有一个变量:

$str = "i do not need this datavar(i need this (also this) and this) i do not need this";
我有下面的表达式,但只返回第一个Phanteses之前的内容,我需要所有内容,直到最后一个或第二个Phanteses

$regex2 = '#(datavar\([^)]+\))#';

是否有一种方法可以将文本中的所有内容都包含在第二个括号内并完成匹配(它可以包含更多内容)。

您可以在第二个右括号或最后一个括号内(或任何固定的数字)获得文本。但是我不知道如何使用pcre检查平衡。下面是第二个和最后一个的代码:


正则表达式不做递归。您要么必须手动考虑每一个可能的封装级别,要么实现一个实际的标记器/解析器。或者您可以对xml标记的所有打开和关闭参数执行
preg\u replace
,并使用dom解析器。R在这里代表什么:#(([^()]+|(?R))*)#问题在于,PCRE只支持在遇到第一个“)”递归之前将文本带入,但假设有一个字符串文本,它包含不平衡的
。那么递归就没用了。“但是你不能用pcre来检查平衡。”--当然可以,。编辑以显示这可能是我的限制。如果有更好的答案出现,我会删除我的。太好了!我从没想过这是可能的,尝试了又尝试,兄弟!
$str = "i do not need this datavar(i need this (also this) and this) i do not need this";
$regex2 = '#datavar\(([^)]+\)[^)]+)#'; //second )
$regex2 = '#datavar\((.+)\)#'; //last )
preg_match_all($regex2,$str, $m);
var_dump($m[1]);