匹配"****"或[****]之间的所有内容

我有一个看起来像这样的正则表达式:

(?="(test)"s*:s*(".*?"|[.*?]))

匹配"..."或之间的值[...]

输入

"test":"value0"
"test":["value1", "value2"]

输出

Group1     Group2
test       value0
test       "value1", "value2" // or - value1", "value2

我有什么技巧可以忽略""[]坚持两组,group1并且group2

我试过了,(?="(test)"s*:s*(?="(.*?)"|[(.*?)]))但这给了我 4 个组,这对我不利。

回答

您可以在带有分支重置组的PHP 中使用此条件正则表达式:

"(test)"h*:h*(?|"([^"]*)"|[([^]]*)])

这将为您提供两个带有封闭"或的输入中的捕获组[...]

正则表达式演示

正则表达式详情:

  • (?|..)是一个分支复位组。在此构造的每个替代项中声明的子模式将从相同的索引重新开始
  • (?|"([^"]*)"|[([^]]*)])if-then-else条件子模式,这意味着如果"匹配则使用"([^"]*)"否则使用[([^]]*)]子模式
  • I am well aware of these techniques to build a regex. I didn't check series of comments below question earlier.

以上是匹配"****"或[****]之间的所有内容的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>