Regex 当逗号不在任何括号内时,用逗号分解字符串
我有字符串“xyz(text1,(text2,text3)),asd“我想用它来分解,但唯一的条件是分解只能发生在Regex 当逗号不在任何括号内时,用逗号分解字符串,regex,preg-replace,Regex,Preg Replace,我有字符串“xyz(text1,(text2,text3)),asd“我想用它来分解,但唯一的条件是分解只能发生在,上,它们不在任何括号内(这里是()) 我在stackoverflow上看到了许多这样的解决方案,但它不符合我的模式。()() 对于我的模式,什么是正确的正则表达式 在我的例子中,xyz(text1,(text2,text3)),asd 结果应该是 xyz(text1,(text2,text3))和asd您可以使用带有以下内容的正则表达式的匹配方法: 见 详细信息 \w+-1+字字
,
上,它们不在任何括号内(这里是()
)
我在stackoverflow上看到了许多这样的解决方案,但它不符合我的模式。()()
对于我的模式,什么是正确的正则表达式
在我的例子中,xyz(text1,(text2,text3)),asd
结果应该是
xyz(text1,(text2,text3))
和asd
您可以使用带有以下内容的正则表达式的匹配方法:
见
详细信息
-1+字字符\w+
-可选的捕获组匹配(\(((?:[^()]+++(?1))*\)?
-a\(
(
-零次或多次出现(?:[^()]++|(?1))*
-1+字符,而不是[^()]++
和(
)
-或|
-整个第1组模式(?1)
-a\)
)
Array
(
[0] => xyz(text1,(text2,text3))
[1] => asd
)
如果要求在
,
处拆分,但只在嵌套的括号外拆分,另一个想法是使用,括号内的内容也可以使用
或者
管道字符的左侧用于匹配和跳过括号内的内容。在右侧,它将匹配括号外的其余逗号
使用的模式是不同常见模式的变体,以匹配嵌套的父项。经常使用@WiktorStribiżew thx。成功了。正则表达式很神奇。我想更多地了解它:D
$rx = '/\w+(\((?:[^()]++|(?1))*\))?/';
$s = 'xyz(text1,(text2,text3)),asd';
if (preg_match_all($rx, $s, $m)) {
print_r($m[0]);
}
Array
(
[0] => xyz(text1,(text2,text3))
[1] => asd
)
$res = preg_split('/(\((?>[^)(]*(?1)?)*\))(*SKIP)(*F)|,/', $str);