我想做的是获取引号之间的所有文本。这两个似乎都可以正常工作(使用 ruby)。有人可以告诉我这两者的工作方式是否存在差异,或者它们是否只是相同的东西表达方式不同。
编辑:我主要看在黄瓜步骤定义的双引号之间获取文本(然后我应该看到“Hello World”)。
如果有多个带引号的字符串,第一个可能不会为您提供相同的数据:如果输入数据是,例如
"hello" "world"
第一个表达式将匹配整个字符串,而第二个表达式将仅匹配"hello"
部分。
一般来说,第二个表达式应该更快,因为没有回溯。这是一篇详细讨论此问题的文章的链接。
"(.*)"
- 这个正则表达式匹配字符串的第一个和最后一个
引号之间的所有符号,因为它.*
告诉在匹配中包含任何符号。"([^"]*)"
- 这个正则表达式匹配字符串的第一个和第二个引号之间的所有符号
,因为它[^"]
告诉不要在匹配中包含引号。我建议使用rubular进行正则表达式检查。
嗯不应该这样。(.*)
将匹配任何内容,即使它包含引号,另一方面([^"]*)
将计算任意数量的不包含引号的符号。
它们是不相同的。* 是贪婪的,所以 "(.*)" 将匹配:
fooo "bar" baz "asd"
从 bar 之前的引号一直到包含 asd。这可能不是你想要的。你的第二个例子避免了这种情况。
它们的不同之处在于.
将匹配任何字符并且[^"]
将匹配除引号之外的任何字符。
为了使它们的行为更加一致,您可以将第一个示例更改为"(.*?)"
使任何字符的匹配不贪婪(它将捕获它可以捕获的最短字符串,从而避免在文本中稍后找到另一个结束引号的风险)。