Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.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 All - Fatal编程技术网

Php 递归获取嵌套匹配字符之间的所有文本

Php 递归获取嵌套匹配字符之间的所有文本,php,regex,preg-match-all,Php,Regex,Preg Match All,这是一个示例输入字符串: (#1662#-#[Réz-de-chausseée][Thermostate][Temperature Actuel]>4)和&&Ԙ#==1和#[Aucun][Template][ReviseConfort#templateSuffix][code> 以下是所需的输出字符串: #1662# #[Réz-de-chaussée][Thermostate][Temperature Actuel]# #1304# #[Aucun][Template][Revise

这是一个示例输入字符串:

(#1662#-#[Réz-de-chausseée][Thermostate][Temperature Actuel]>4)和&&Ԙ#==1和#[Aucun][Template][ReviseConfort#templateSuffix][code>

以下是所需的输出字符串:

#1662#
#[Réz-de-chaussée][Thermostate][Temperature Actuel]#
#1304#
#[Aucun][Template][ReviseConfort#templateSuffix#]#
我试过这个正则表达式,但不起作用:

~("|\').*?\1(*SKIP)(*FAIL)|\#(?:[^##]|(?R))*\#~
试试这个

说明:

(?: // Grabs everything between 1 opening # and 1 closing # tag that`s not #[ chars #[^#[]+#| // Grabs everything between 2 opening # and 2 closing ]# tags ##(?:.+?]#){2}| // Grabs everything between 1 opening # and 1 closing ]# tag #(?:.+?]#){1} ) (?: //抓住1个开始和1个结束之间的所有标记,该标记不是[chars] #[^#[]+#| //抓取2个开始标记和2个结束标记之间的所有内容 ##(?:.+?]#){2}| //抓住1个开始#和1个结束#标记之间的所有内容 #(?:.+?]#){1} ) 试试这个

说明:

(?: // Grabs everything between 1 opening # and 1 closing # tag that`s not #[ chars #[^#[]+#| // Grabs everything between 2 opening # and 2 closing ]# tags ##(?:.+?]#){2}| // Grabs everything between 1 opening # and 1 closing ]# tag #(?:.+?]#){1} ) (?: //抓住1个开始和1个结束之间的所有标记,该标记不是[chars] #[^#[]+#| //抓取2个开始标记和2个结束标记之间的所有内容 ##(?:.+?]#){2}| //抓住1个开始#和1个结束#标记之间的所有内容 #(?:.+?]#){1}
) 这种情况并不特别适合递归。最好使用普通正则表达式

很难确定以下内容是否适用于所有其他可能的输入,因为您只提供了两个有限的示例

至少在这些示例中,所需的结束符
#
后面是
、空格或行尾。使用这些值的负前瞻性可以捕获内部嵌套的

#(?:[^#]|#(?![\s)]|$))+#

这种情况并不特别适合递归。最好使用普通正则表达式

很难确定以下内容是否适用于所有其他可能的输入,因为您只提供了两个有限的示例

至少在这些示例中,所需的结束符
#
后面是
、空格或行尾。使用这些值的负前瞻性可以捕获内部嵌套的

#(?:[^#]|#(?![\s)]|$))+#

很抱歉,我第一次编辑的示例没有错误。前后的分隔符carcte是#。恐怕您的问题不清楚,因为您的模式尝试匹配的内容与示例输入之间存在明显差异。请提供更真实的示例输入,或者更好的示例输入,以更好地表示您将遇到的字符串类型,从而改进您的问题。很抱歉,我在第一次编辑中的示例没有包含错误。前后的分隔符carcte是#。恐怕您的问题不清楚,因为您的模式尝试匹配的内容与示例输入之间存在明显差异。请提供更真实的示例输入,或者更好的示例输入,以更好地表示您将遇到的字符串类型,从而改进您的问题。这样做很好,但不是为了适应新的情况,现在检查工作正常,但不是为了这个,返回是为了适应新情况,现在检查