首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegEx获取引号中的所有值

RegEx获取引号中的所有值
EN

Stack Overflow用户
提问于 2018-02-08 10:24:22
回答 1查看 56关注 0票数 1

我有一个正则表达式,它给我带来了奇迹:

代码语言:javascript
复制
~--?(?<key>[^= ]+)[ =]
    (?|
        "(?<value> [^\\\\"]*+ (?s:\\\\.[^\\\\"]*)*+ )"
      |
        ([^ ?"]*)
    )~x

它允许我从字符串输入创建一个PHP键值/关联数组,如下所示:

代码语言:javascript
复制
-Parameter1=1234 -Parameter2=38518 -param3 "Test \"escaped\"" -param4 10 -param5 0 -param6 "TT" -param7 "Seven" -param8 "secret" "-SuperParam9=4857?--SuperParam10=123"

现在,唯一的问题是,我把它作为我上一个问题的答案和我不知道如何更新regex表达式以适应我的新需求。RegEx不是我最强大的一面。

我想在该表达式中介绍的新模式是(并保留现有功能):

代码语言:javascript
复制
-parameterX"Value like this, glue is nothing" -paramY"Yes, like this" -paramZ"120983"

我尝试了一个愚蠢的黑客,比如,拦截我的输入字符串,并将所有引号替换为左侧的一个空格,如下所示:

代码语言:javascript
复制
$input = str_replace('"', ' "', $input);

但这不是别人想要的..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-08 10:36:42

您必须确保键部分与双引号不匹配,并且[ =]部件是可选的(因为在新格式中,键和"..."部件之间没有空格。

使用

代码语言:javascript
复制
/--?(?<key>[^= "]+)[ =]?
(?|
    "(?<value> [^\\"]*+ (?s:\\.[^\\"]*)*+ )"
  |
    ([^ ?"]*)
)/x

这个regex演示

修改后的部分是(?<key>[^= "]+)[ =]?[^= "]+匹配=、space和"以外的一个或多个字符(可能,\w+就足够了),[ =]?匹配=或空格的一次或零次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48683131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档