我想找到一个与包含空格的引号包围的字符相匹配的正则表达式
尝试的例子:
adb shell am startservice -n fooApp/barService -a INVOKE --es "key" "key1" --es "value" "value 2 has spaces"
只会在"value 2 has spaces"
到目前为止,我已经得到了这个
"([^"](?<=\s)[^"]*)"
但它匹配
" "
与key"
之间以及"key1
与value"
和"value
之间的" --es "
...
我觉得我很接近,但却错过了一些关键的东西。
答案 0 :(得分:2)
您可以使用此模式并仅提取组1的非空值:
"[^" ]*"|("[^"]*")
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用此正则表达式:
"[^"\s]+[\s]+[^"]*"
如果你想确保"value.."
有一个前面的空格,not matched "value ..."
,那么请改用它:
(?<=\s)"[\w]+[\s]+[\d\w\s]*"
答案 3 :(得分:0)
您无法验证配对引号的整个字符串
你唯一能做的就是验证配对(平衡)
直到你要找的引用字符串。
你必须强制引擎遵守,即。不要仅仅向前跳过 找到匹配。
您可以强制引擎执行此操作的唯一方法是使用\G
锚构造。它使引擎匹配位于
的位置
最后一场比赛没有结束,否则它迫使它失败,停止匹配
完全。
这将实现 -
\G[^"]*(?:"[^"\s]*"[^"]*)*("[^"\s]*\s[^"]*")
但是,如果引擎不支持\G
构造,则其他方式有
要使用的。
\G # This MUST match where last match left off
[^"]* # Up to the next "
(?: # Absorb balanced, non space quotes
"
[^"\s]*
"
[^"]*
)*
( # (1 start), The quotes with spaces.
"
[^"\s]*
\s
[^"]*
"
) # (1 end)