我有一个输入,看起来像这样:
<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]
谁能告诉我该往哪个方向看?
1条答案
按热度按时间6kkfgxo01#
这个正则表达式先匹配键,然后匹配值。
第一个月
分为2组:
(?<=<ID>)(\d+)(?=<VAL>)
使用正向后查找和向前查找在<ID>
和<VAL>
之间匹配密钥\d+
(?<=<ID>)
是正向后查找(?=<VAL>)
为正前瞻(?<=<VAL>)[a-z\d]*(?=<ID>)
使用正向后查找和向前查找匹配<VAL>
和<ID>
之间的值[a-z\d]*
与值匹配(?<=<VAL>)
是正向后查找(?=<ID>)
为正前瞻regex101.com