2

我想做的是获取引号之间的所有文本。这两个似乎都可以正常工作(使用 ruby​​)。有人可以告诉我这两者的工作方式是否存在差异,或者它们是否只是相同的东西表达方式不同。

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

4

5 回答 5

4

如果有多个带引号的字符串,第一个可能不会为您提供相同的数据:如果输入数据是,例如

"hello" "world"

第一个表达式将匹配整个字符串,而第二个表达式将仅匹配"hello"部分。

一般来说,第二个表达式应该更快,因为没有回溯。这是一篇详细讨论此问题的文章的链接

于 2013-02-15T16:10:56.507 回答
4
  • "(.*)"- 这个正则表达式匹配字符串的第一个和最后一个 引号之间的所有符号,因为它.*告诉在匹配中包含任何符号
  • "([^"]*)"- 这个正则表达式匹配字符串的第一个和第二个引号之间的所有符号 ,因为它[^"]告诉不要在匹配中包含引号。

我建议使用rubular进行正则表达式检查。

于 2013-02-15T16:15:12.070 回答
2

嗯不应该这样。(.*)将匹配任何内容,即使它包含引号,另一方面([^"]*)将计算任意数量的不包含引号的符号。

于 2013-02-15T16:09:37.573 回答
1

它们是不相同的。* 是贪婪的,所以 "(.*)" 将匹配:

fooo "bar" baz "asd"

从 bar 之前的引号一直到包含 asd。这可能不是你想要的。你的第二个例子避免了这种情况。

于 2013-02-15T16:11:09.010 回答
1

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

为了使它们的行为更加一致,您可以将第一个示例更改为"(.*?)"使任何字符的匹配不贪婪(它将捕获它可以捕获的最短字符串,从而避免在文本中稍后找到另一个结束引号的风险)。

于 2013-02-15T16:12:28.830 回答