Ruby正则表达式:“捕获字符串,除非它后跟......”

时间:2011-01-26 15:52:57

标签: ruby regex

我的正则表达式捕获引用的短语:

"([^"]*)"

我希望通过忽略引号来改进它,后面跟着', - '(逗号,空格和破折号按此特定顺序)。

我该怎么做?

测试:http://rubular.com/r/xls6vN1w92

4 个答案:

答案 0 :(得分:4)

这应该使用Negative Lookahead

来实现
"(?!, -)([^"]*)"(?!, -)
有点icky,但它确实有效。你想确保你的字符串后面没有引号,否则匹配将从收盘价开始。

http://rubular.com/r/yFMyUKJOHL

答案 1 :(得分:1)

<强>正则表达式

"(.*?)"(?!, -)

工作示例

http://rubular.com/r/9kOmZLxLfy

答案 2 :(得分:1)

这在你的背景下是不可解决的,它是开放式的。解析它的唯一方法是消耗不是和想要的,但它仍然是一个无效的前提。

/"([^"]*?)"(?!, -)|"[^"]*?"(?=, -)/

然后在每场比赛中检查捕获组1,如下所示:

$rx = qr/"([^"]*?)"(?!, -)|"[^"]*?"(?=, -)/;
while (' "ingnore me", - "but not me" ' =~ /$rx/g) {
  print "'$1'\n" if defined $1
}

答案 3 :(得分:0)

在正则表达式的末尾添加(?!...)

"([^"\n]*)"(?!, -)