php - 正则表达式忽略括号中的分隔符
问题描述
早上好,我需要你的帮助。我需要使用 REGEX 拆分文本,但要省略括号中的内容
preg_match_all('/\((?:[^()]|(?R))+\)|\'[^\']*\'|[^(),]+/', $input_lines, $output_array);
我有这个字符串:
Test A, Test B, Test C (data1, data1)
预赛我们这样做:
0 => Test A
1 => Test B
2 => Test C
3 => (data1, data1)
我怎样才能达到这个结果?
0 => Test A
1 => Test B
2 => Test C (data1, data1)
我需要忽略括号中的内容,只分开其余的内容。
预先感谢您的任何帮助。
编辑
这最终解决了我的情况。我尝试使用 preg split。
preg_split('/,(?![^(]*\)) /', $input_line);
解决方案
您可能要做的是使用递归模式来递归第一个子模式,(?1)
以匹配所有括号,因此拆分也不会在括号内拆分并使用SKIP FAIL。
然后用逗号分割,后跟 0+ 个水平空白字符
(\((?:[^()]++|(?1))*\))(*SKIP)(*F)|,\h*
$re = '/(\((?:[^()]++|(?1))*\))(*SKIP)(*F)|,\h*/';
$strings = [
"Test A, Test B, Test C (data1, data1)",
"Test A, Test B, Test C (data1, data1), Test D (data1, data1), Test E (data1, data1(data, data))",
"Test A, Test B, Test C (data1, data1), Test D (data1, data1), Test E ((data1, data1))"
];
foreach($strings as $s) {
print_r(preg_split($re, $s));
}
输出
Array
(
[0] => Test A
[1] => Test B
[2] => Test C (data1, data1)
)
Array
(
[0] => Test A
[1] => Test B
[2] => Test C (data1, data1)
[3] => Test D (data1, data1)
[4] => Test E (data1, data1(data, data))
)
Array
(
[0] => Test A
[1] => Test B
[2] => Test C (data1, data1)
[3] => Test D (data1, data1)
[4] => Test E ((data1, data1))
)