我的值是这样的:
"Foo Bar" "Another Value" something else
什么正则表达式将返回括在引号中的值(例如Foo Bar和Another Value)?
我的值是这样的:
"Foo Bar" "Another Value" something else
什么正则表达式将返回括在引号中的值(例如Foo Bar和Another Value)?
当前回答
与亚当的答案不同,我有一个简单但有效的答案:
(["'])(?:\\\1|.)*?\1
如果你想要得到引号中的内容,只需添加圆括号:
(["'])((?:\\\1|.)*?)\1
$1匹配引号字符,$2匹配内容字符串。
其他回答
接受的答案的RegEx返回值,包括它们的寻源引号:“Foo Bar”和“Another Value”作为匹配。
下面是RegEx,它只返回引号之间的值(正如提问者所要求的那样):
仅使用双引号(使用捕获组#1的值):
"(.*?[^\\])"
仅使用单引号(使用捕获组#1的值):
'(.*?[^\\])'
Both(使用捕获组#2的值):
([']) "(. *? 1 \ [^ \ \])
-
全部支持转义和嵌套引号。
以上所有的答案都很好....除了他们不支持所有的unicode字符!at ECMA Script (Javascript)
如果你是Node用户,你可能想要支持所有unicode字符的可接受答案的修改版本:
/(?<=((?<=[\s,.:;"']|^)["']))(?:(?=(\\?))\2.)*?(?=\1)/gmu
试着在这里。
echo 'junk "Foo Bar" not empty one "" this "but this" and this neither' | sed 's/[^\"]*\"\([^\"]*\)\"[^\"]*/>\1</g'
这将导致:>Foo Bar<><>但这<
在这里,为了清晰起见,我显示了><'s之间的结果字符串,也使用了这个sed命令的非贪婪版本,我们首先抛出' 's之前和之后的垃圾,然后用' ' 's之间的部分替换它,并用><'s包围它。
我喜欢《Axeman》更广阔的版本,但也遇到了一些问题(游戏邦注:例如它并不匹配
foo "string \\ string" bar
or
foo "string1" bar "string2"
所以我试着修正它:
# opening quote
(["'])
(
# repeat (non-greedy, so we don't span multiple strings)
(?:
# anything, except not the opening quote, and not
# a backslash, which are handled separately.
(?!\1)[^\\]
|
# consume any double backslash (unnecessary?)
(?:\\\\)*
|
# Allow backslash to escape characters
\\.
)*?
)
# same character as opening quote
\1
更多的答案!这是我使用的解决方案
\"([^\"]*? 图标 [^\"]*?)\"
TLDR; 替换词图标与你所寻找的说语录,瞧!
它的工作方式是寻找关键字,而不关心引号之间的其他内容。 例如: id = " fb-icon " id = " icon-close " id = " large-icon-close " 正则表达式查找引号" 然后它寻找任何可能的字母组,而不是“ 直到找到图标 任何可能的字母组都不是" 然后它会寻找一个结束。”