PHP正则表达式提取键值逗号分隔

moh*_*iee 4 php regex

我想从一个字符串中提取一些字符串,其中KEYs与VALUE分开,冒号(:)和s由逗号(,)分隔.问题是VALUE可以包含逗号.举个例子:

category:information technology, computer,publisher:Elsevier (EV),subject:Ecology, Evolution, Behavior and Systematics
Run Code Online (Sandbox Code Playgroud)

在此示例中,必须提取的KEY包括:类别,发布者和主题.最终结果必须如下:

category = information technology, computer
publisher = Elsevier (EV)
subject = Ecology, Evolution, Behavior and Systematics
Run Code Online (Sandbox Code Playgroud)

我试着写一个递归的正则表达式,但它不起作用:

(category|publisher|subject):(.*?)(?:,(?R)|.?)
Run Code Online (Sandbox Code Playgroud)

有人可以帮助解决这个问题.谢谢.

use*_*495 5

好吧,如果你可以在字符串的末尾添加一个逗号,我认为这有效:

(\w+):([^:]+),
Run Code Online (Sandbox Code Playgroud)

编辑:

乔纳森库恩是完全正确的:

(\w+):([^:]+)(?:,|$)
Run Code Online (Sandbox Code Playgroud)

这有效

  • 如果用"(?:,| $)"替换尾随逗号,它将匹配逗号或非分组匹配中字符串的结尾.无需在字符串末尾添加逗号.https://regex101.com/r/gG9kF3/1 (3认同)