2010-03-08 62 views
20

我怎么能匹配2个指定的字符之间的所有字符,说" " - > 从sdfsf " 12asdf " sdf正则表达式之间找到字符“”

我想只得到12asdf。如果你想捕捉排除之间的“”一切

"(.*?)" 

"([^"]*)" 

+1

什么是你希望得到什么?它没有返回领先的空白吗?向我们展示您正在使用的正则表达式,并将示例结果放在代码块中。 – Robusto 2010-03-08 16:27:43

回答

61

您可以使用以下模式" "之间得到的一切,包括前端和后端空格您可以执行的前后空格:

"\s*(.*?)\s*" 

"\s*([^"]*)\s*" 
+0

同意。确保查找任何可以在“非贪婪”(vs“贪婪”)表达式上找到的东西。如果你还不知道它应该是一个有趣的阅读。如果你知道其中的差异,它肯定会让你的生活更加容易。 – exhuma 2010-03-08 16:38:54

0

您可以使用preg_match(/"([^"]*)"/,$input,$matches);$matches[1]会有你想要的。

5

我建议你使用

(?<=")(?:\\.|[^"\\])*(?=") 

这将只匹配什么是报价(不包括引号本身),并正确处理您的字符串内转义引号之间。

所以在"She said, \"Hi!\"",它将匹配She said, \"Hi!\"

如果你正在使用JavaScript或Ruby(你没有提到),因此不能使用回顾后,使用

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

,并与捕获组的工作没有。 1.

+0

这并没有处理我或本页上的转义引号https://regex101.com/ – Don 2016-02-11 01:00:52

+0

@Don:你能否提供非工作正则表达式的链接(点击保存正则表达式并发布该链接)? – 2016-02-11 07:14:52

-1
[^"].*[^"] 

如果你输入:“埃利”,它会给埃利(注:不包括引号)