Regex 提取`<;键>=&书信电报;值>;`带有正则表达式、点组(.+;?)的对不与可选空格(\s)配合
我有这个字符串:Regex 提取`<;键>=&书信电报;值>;`带有正则表达式、点组(.+;?)的对不与可选空格(\s)配合,regex,pcre,Regex,Pcre,我有这个字符串: metadata=1.2 name=stone:supershare UUID=eff4e7bc:47aea5cf:0f0560f0:2de38475 我希望从中提取键和值对:= 正如预期的那样,这不会返回UUID对,因为后面没有空格: [ "metadata=1.2 ", "name=stone:supershare " ], [ "metadata", "name" ], [ "1.2", "stone:supershare
metadata=1.2 name=stone:supershare UUID=eff4e7bc:47aea5cf:0f0560f0:2de38475
我希望从中提取键和值对:=
正如预期的那样,这不会返回UUID
对,因为后面没有空格:
[
"metadata=1.2 ",
"name=stone:supershare "
],
[
"metadata",
"name"
],
[
"1.2",
"stone:supershare"
]
现在,显然,我们应该使\s
查找成为可选的:
/(\w+)=(.+?)\s?/g
不过,这完全是从值中仅提取第一个符号:
[
"metadata=1",
"name=s",
"UUID=e"
],
[
"metadata",
"name",
"UUID"
],
[
"1",
"s",
"e"
]
我有点迷路了,我在这里做错了什么?由于不需要\s
,前面的部分(.+?)
可以自由地只匹配一个字符,因为?
它将尝试这样做。您可以:
- 将
(.+?)
更改为(.+)
,但如果您的值可以包含空格或空格,则可能会导致其他问题
- 将
\s?
更改为(?:\s |$)
@acfrancis的解释是正确的,另一方面,您可以尝试以下方法:
/(\w+)=([^\s]+)/g
这与原始表达式中使用的(\w+)
匹配
,但随后它与使用一个或多个非空格字符的([^\s]+)
的值匹配
Bah,尝试了一个\s |$
,但是是的,没有括号。这感觉更具可读性。你是对的,我应该使用非捕获参数。请参阅更新的答案。
/(\w+)=([^\s]+)/g