正则表达式不以

本文介绍如何使用正则表达式匹配不以特定字符或字符串结尾的文本。提供了多种解决方案,包括使用lookbehind断言和否定字符集的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载地址:https://gxnotes.com/article/41270.html

问题描述

我找不到正确的正则表达式来匹配任何不以某种条件结尾的字符串。例如,我不想匹配以a结尾的任何内容。

这匹配

b
ab
1

这不符合

a
ba

我知道正则表达式应该结束于$来标记结束,尽管我不知道应该怎么做。

编辑:原来的问题似乎不是我的例子。那么,如何处理多个字符?说什么没有结束ab

我已经能够解决这个问题,使用this thread

.*(?:(?!ab).).$

虽然这样做的缺点是它与一个字符串不匹配。

最佳解决方案

你不给我们的语言,但是如果你的正则表达式支持look behind assertion,这就是你需要的:

.*(?<!a)$

(?<!a)是一个否定的lookbehind断言,确保在字符串(或具有m修饰符的行)的结尾之前,没有字符”a”。

参见here on Regexr

您也可以轻松地将其与其他字符进行扩展,因为此检查字符串并不是字符类。

.*(?<!ab)$

这将匹配任何不结束与”ab”,see it on Regexr

次佳解决方案

使用not(^)符号:

.*[^a]$

如果您将^符号放在方括号的开头,则表示“括号内的所有内容”。 $只是一个到底的锚点。

For multiple characters,只是把它们全部放在自己的字符集中:

.*[^a][^b]$

第三种解决方案

要搜索以”.tmp”结尾的文件,我们使用以下正则表达式:

^(?!.*[.]tmp$).*$

Regex Tester测试得出以下结果:

regex

第四种方案

.*[^a]$

上面的正则表达式将匹配不是以a结尾的字符串。

参考文献


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值