我想做的是获取引号之间的所有文字。这两个似乎都正常工作(使用ruby)。有人可以告诉我,如果两者的工作方式有所不同,或者它们是否以同样的方式表达不同。
编辑: 我主要想看黄瓜步骤定义的双引号之间的文本(然后我应该看到“Hello World”)。
答案 0 :(得分:4)
如果有多个带引号的字符串,第一个可能无法获得相同的数据:如果输入数据是,请说
"hello" "world"
第一个表达式将匹配整个字符串,而第二个表达式仅匹配"hello"
部分。
一般来说,第二个表达式应该更快,因为没有回溯。这是link to an article discussing this issue at length。
答案 1 :(得分:3)
"(.*)"
- 此正则表达式匹配第一个和最后一个之间的所有符号
字符串的引号,因为.*
告诉在匹配中包含任何符号。"([^"]*)"
- 此正则表达式匹配所有符号
在字符串的第一个和第二个引号之间,因为[^"]
告诉在匹配中不包含引号。我建议rubular进行正则表达式检查。
答案 2 :(得分:2)
(.*)
会匹配任何内容,即使它包含引号,另一方面([^"]*)
会计算不包含引号的任意数量的符号。
答案 3 :(得分:1)
他们不一样。 *贪婪,所以“(。*)”将匹配:
fooo“bar”baz“asd”
从bar之前的引号一直到包含asd。这可能不是你想要的。你的第二个例子就是避免这种情况。
答案 4 :(得分:1)
它们的不同之处在于.
将匹配任何字符,[^"]
将匹配除引号之外的任何字符。
为了使它们表现得更加一致,您可以将第一个示例更改为"(.*?)"
,这使得任何字符的匹配都非贪婪(它将捕获它可以捕获的最短字符串,从而避免发现另一个结束的风险 - 引号后面的文字)。