我的正则表达式捕获引用的短语:
"([^"]*)"
我希望通过忽略引号来改进它,后面跟着', - '(逗号,空格和破折号按此特定顺序)。
我该怎么做?
答案 0 :(得分:4)
这应该使用Negative Lookahead:
来实现"(?!, -)([^"]*)"(?!, -)
有点icky,但它确实有效。你想确保你的字符串后面没有引号,否则匹配将从收盘价开始。
答案 1 :(得分:1)
答案 2 :(得分:1)
这在你的背景下是不可解决的,它是开放式的。解析它的唯一方法是消耗不是和想要的,但它仍然是一个无效的前提。
/"([^"]*?)"(?!, -)|"[^"]*?"(?=, -)/
然后在每场比赛中检查捕获组1,如下所示:
$rx = qr/"([^"]*?)"(?!, -)|"[^"]*?"(?=, -)/;
while (' "ingnore me", - "but not me" ' =~ /$rx/g) {
print "'$1'\n" if defined $1
}
答案 3 :(得分:0)
在正则表达式的末尾添加(?!...)
:
"([^"\n]*)"(?!, -)