regex 正则表达式捕获重复组

nlejzf6q  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个输入,看起来像这样:

<ID>0<VAL>a1b<ID>1<VAL>a2b<ID>2<VAL>a3b<ID>3<VAL>a4b

我需要捕获键值对(例如id - val)或至少一个组数组,如下所示:[0, a1b, 1, a2b, 2, a3b, 3, a4b]
只捕获一对(即当输入仅包含单个对时)的工作原理如下:

(?>(?:<ID>(\d+))(?:<VAL>(.+)))?

其结果是:[0, a1b].
但它不适用于多个对-它捕获0作为一个组,然后作为第二个组,它采取其余的输入,除了第一个<VAL>标签,如下所示:[0, a1b<ID>1<VAL>a2b<ID>2<VAL>a3b<ID>3<VAL>a4b]
谁能告诉我该往哪个方向看?

6kkfgxo0

6kkfgxo01#

这个正则表达式先匹配键,然后匹配值。
第一个月
分为2组:

  • (?<=<ID>)(\d+)(?=<VAL>)使用正向后查找和向前查找在<ID><VAL>之间匹配密钥\d+
  • (?<=<ID>)是正向后查找
  • (?=<VAL>)为正前瞻
  • (?<=<VAL>)[a-z\d]*(?=<ID>)使用正向后查找和向前查找匹配<VAL><ID>之间的值
  • [a-z\d]*与值匹配
  • (?<=<VAL>)是正向后查找
  • (?=<ID>)为正前瞻

regex101.com

相关问题