Regex 如何将一组值与组1匹配

Regex 如何将一组值与组1匹配,regex,pcre,Regex,Pcre,正在解决SO中发布的一个正则表达式问题,但被困于此 从这个字符串 Ob=Web technology,OB=Product SPe,OB=Dev profile,OB=Computer Management,oB=Hardware Services,cd=sti,CD=com,cd=ws 必须按如下方式删除这些值 Web technology,Product SPe,Dev profile,Computer Management,Hardware Services 我在试下面的正则表达式 (

正在解决SO中发布的一个正则表达式问题,但被困于此

从这个字符串

Ob=Web technology,OB=Product SPe,OB=Dev profile,OB=Computer Management,oB=Hardware Services,cd=sti,CD=com,cd=ws
必须按如下方式删除这些值

Web technology,Product SPe,Dev profile,Computer Management,Hardware Services
我在试下面的正则表达式

(?=Ob)(?:(\w+=)([\w\s]+,?))+
我的假设是
group 1
应该拥有所有的键,
group 2
应该拥有所有的值。但是除了最后一个键值对之外,所有其他键值对都被分配到
组0

是否有办法将所有值发送到
组2

和.

正则表达式:

(?i)Ob=([^,]+)|(?!.*\bob\b).+
替换字符串:

$1

  • (?i)
    将进行不区分大小写的匹配
  • Ob=([^,]+)
    组索引1包含所有Ob值
  • |
  • (?!.*\bob\b)。+
    匹配任何字符一次或多次,但不包含
    \bob\b
尝试此操作。替换为
空字符串
。请参阅演示。不要忘记标记
i

尝试此操作。替换为
$1
。请参阅演示


此正则表达式适用于您:

^(?!Ob=).*(*SKIP)(*F)|(\w+)=(\w+(?=,|$))
您可以看到,您将获得组1中的所有键和组2中的所有值


正则表达式的问题是
group1
group2
包含在非捕获组中。这导致使用
组0
捕获整个正则表达式。另一件事是积极的前瞻性阻止了正则表达式进行全局匹配

下面的正则表达式将收集所有
组1
组2

(\w+)=([\w\s]+)(?=[,\s]+)

看看它是怎么做到的

@Yal您的预期输出是什么?
^(?!Ob=).*(*SKIP)(*F)|(\w+)=(\w+(?=,|$))
(\w+)=([\w\s]+)(?=[,\s]+)