正则表达式“(。*)”vs“([^”] *)“

时间:2013-02-15 16:08:21

标签: ruby regex

我想做的是获取引号之间的所有文字。这两个似乎都正常工作(使用ruby)。有人可以告诉我,如果两者的工作方式有所不同,或者它们是否以同样的方式表达不同。

编辑: 我主要想看黄瓜步骤定义的双引号之间的文本(然后我应该看到“Hello World”)。

5 个答案:

答案 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)

它们的不同之处在于.将匹配任何字符,[^"]将匹配除引号之外的任何字符。

为了使它们表现得更加一致,您可以将第一个示例更改为"(.*?)",这使得任何字符的匹配都非贪婪(它将捕获它可以捕获的最短字符串,从而避免发现另一个结束的风险 - 引号后面的文字)。