我有一个正则表达式,它给我带来了奇迹:
~--?(?<key>[^= ]+)[ =]
(?|
"(?<value> [^\\\\"]*+ (?s:\\\\.[^\\\\"]*)*+ )"
|
([^ ?"]*)
)~x它允许我从字符串输入创建一个PHP键值/关联数组,如下所示:
-Parameter1=1234 -Parameter2=38518 -param3 "Test \"escaped\"" -param4 10 -param5 0 -param6 "TT" -param7 "Seven" -param8 "secret" "-SuperParam9=4857?--SuperParam10=123"现在,唯一的问题是,我把它作为我上一个问题的答案和我不知道如何更新regex表达式以适应我的新需求。RegEx不是我最强大的一面。
我想在该表达式中介绍的新模式是(并保留现有功能):
-parameterX"Value like this, glue is nothing" -paramY"Yes, like this" -paramZ"120983"我尝试了一个愚蠢的黑客,比如,拦截我的输入字符串,并将所有引号替换为左侧的一个空格,如下所示:
$input = str_replace('"', ' "', $input);但这不是别人想要的..。
发布于 2018-02-08 10:36:42
您必须确保键部分与双引号不匹配,并且[ =]部件是可选的(因为在新格式中,键和"..."部件之间没有空格。
使用
/--?(?<key>[^= "]+)[ =]?
(?|
"(?<value> [^\\"]*+ (?s:\\.[^\\"]*)*+ )"
|
([^ ?"]*)
)/x修改后的部分是(?<key>[^= "]+)[ =]?:[^= "]+匹配=、space和"以外的一个或多个字符(可能,\w+就足够了),[ =]?匹配=或空格的一次或零次。
https://stackoverflow.com/questions/48683131
复制相似问题