【问题标题】:PHP Regex extract key-value comma separated [duplicate]PHP正则表达式提取键值逗号分隔[重复]
【发布时间】:2016-02-19 00:13:00
【问题描述】:

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

category:information technology, computer,publisher:Elsevier (EV),subject:Ecology, Evolution, Behavior and Systematics

在本例中,必须提取的 KEY 是:类别、出版商和主题。 最终结果必须如下:

category = information technology, computer
publisher = Elsevier (EV)
subject = Ecology, Evolution, Behavior and Systematics

我尝试编写递归正则表达式,但它不起作用:

(category|publisher|subject):(.*?)(?:,(?R)|.?)

谁能帮忙解决这个问题。谢谢。

【问题讨论】:

    标签: php regex


    【解决方案1】:

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

    (\w+):([^:]+),
    

    编辑:

    乔纳森·库恩完全正确:

    (\w+):([^:]+)(?:,|$)
    

    这行得通

    【讨论】:

    • 如果您用(?:,|$) 替换尾随逗号,它将匹配逗号或非分组匹配中字符串的结尾。无需在字符串末尾添加逗号。 regex101.com/r/gG9kF3/1
    • 谢谢。这个正则表达式可以正常工作,但你可以分析下面也可以工作的正则表达式:(\b\w+):(.*?(?=,\w+:|$))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多