我的值是这样的:

"Foo Bar" "Another Value" something else

什么正则表达式将返回括在引号中的值(例如Foo Bar和Another Value)?


当前回答

这个版本

转义引号的说明 控制回溯 /(["'])((?:(?!\ 1 )[^\\]|(?:\\\\)*\\[^\\])*)\ 1 /

其他回答

一般来说,下面的正则表达式片段就是你要找的:

"(.*?)"

这使用了非贪婪的*?运算符来捕获下一个双引号之前的所有内容。然后,使用特定于语言的机制提取匹配的文本。

在Python中,你可以这样做:

>>> import re
>>> string = '"Foo Bar" "Another Value"'
>>> print re.findall(r'"(.*?)"', string)
['Foo Bar', 'Another Value']
string = "\" foo bar\" \"loloo\""
print re.findall(r'"(.*?)"',string)

试试这个,就像一个魅力!!

\表示跳过字符

接受的答案的RegEx返回值,包括它们的寻源引号:“Foo Bar”和“Another Value”作为匹配。

下面是RegEx,它只返回引号之间的值(正如提问者所要求的那样):

仅使用双引号(使用捕获组#1的值):

"(.*?[^\\])"

仅使用单引号(使用捕获组#1的值):

'(.*?[^\\])'

Both(使用捕获组#2的值):

([']) "(. *? 1 \ [^ \ \])

-

全部支持转义和嵌套引号。

模式(["'])(?:(?=(\\?))\2.)*?上面的\1完成了这项工作,但我担心它的性能(它不差,但可以更好)。我的比它快20%。

模式“(.*?)”是不完整的。我对阅读这篇文章的人的建议是不要使用它!!

例如,它不能捕获很多字符串(如果需要,我可以提供一个详尽的测试用例),如下所示:

$string = '你好吗?我很好,谢谢你;

其余的都和上面那个一样“好”。

如果你真的关心性能和精度,那么就从下面的开始:

/(['"])((\\\ 1 |。)* ?)\ 1 /通用

在我的测试中,它涵盖了我遇到的每一个字符串,但如果你发现一些不工作的东西,我很乐意为你更新它。

在在线正则表达式测试器中检查我的模式。

我认为:

"([^"]*)"

[^"]是除'"'以外的任何字符的正则表达式 我用这个代替非贪婪多算子的原因是我需要不断地查找以确保我得到的是正确的。