gpt4 book ai didi

regex - 当逗号不在任何括号内时用逗号分解字符串

转载 作者:行者123 更新时间:2023-12-04 21:51:27 25 4
gpt4 key购买 nike

我有字符串 "xyz(text1,(text2,text3)),asd"我想用它来分解它,但唯一的条件是分解应该只发生在不在任何内部的 , 上括号(这里是 ())。

我在 stackoverflow 上看到了很多这样的解决方案,但它不适用于我的模式。 ( example1 ) ( example2 )

什么是适合我的模式的正确正则表达式?

在我的例子中 xyz(text1,(text2,text3)),asd

结果应该是

xyz(text1,(text2,text3))asd

最佳答案

您可以使用带有 subroutine 的正则表达式的匹配方法:

preg_match_all('~\w+(\((?:[^()]++|(?1))*\))?~', $s, $m)

参见 regex demo

详情

  • \w+ - 1+ 个单词字符
  • (\((?:[^()]++|(?1))*\))? - 可选的捕获组匹配
    • \( - 一个 (
    • (?:[^()]++|(?1))* - 零次或多次出现
      • [^()]++ - 除了 ()
      • 以外的 1 个以上字符
      • | - 或者
      • (?1) - 整个第 1 组模式
    • \) - )

PHP demo :

$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
)

关于regex - 当逗号不在任何括号内时用逗号分解字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com