正则表达式:匹配不以特定短语开头的行

3
我发现了这个关于负向先行断言的问题,但是在我用来验证正则表达式的Regexr中无法工作: 在Notepad++中查找不以“开头的行

http://www.regexr.com/

我想匹配每一行不以“Sold, ship now”开头的文本。

目前,在regexr上,当我对以下文本使用表达式^(?!Sold, ship now)时:

Sold, ship now: [FreeEconomy Shipping]

Sold, NOT ship now: [FreeEconomy Shipping]

Sold, ship now: [FreeEconomy Shipping]

我收到了0个匹配结果。


4
没有必要在这个问题中发布图片。您可以将表达式和样本数据作为文本发布。只有在无法通过其他方式演示问题时才应使用图像。请参阅此Meta帖子获取应避免使用图像的诸多原因列表。 - Ken White
1
此外,RegExr 还允许您保存您的正则表达式和测试数据,并直接链接到它们。提供通用的 RegExr 网站链接并不比发布数据图像更有帮助。但我们真正需要的只是您的代码/示例数据/任何内容“作为文本”,这样我们就可以将其复制到我们自己的编辑器/IDE 中并自行处理。 - Alan Moore
可以使用基本的正则表达式完成,但是它的大小将为 O(N²),其中 N 是字符串的长度。 :-) - bipll
1个回答

3

您需要使用多行标志。在regexr的情况下,可以像这样激活:

regexr multiline flag

此外,如果您想返回不以Sold, ship now开头的整行,我建议在表达式中使用点加号:

^(?!Sold, ship now).+

1
Notepad++始终处于多行模式,因此我怀疑缺少的.+才是真正的问题。 - Alan Moore
祝福你。我已经尝试过.+,但它不在那个截图中。 - veta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接