为了账号安全,请及时绑定邮箱和手机立即绑定

不以给定后缀结尾的字符串的正则表达式

/ 猿问

不以给定后缀结尾的字符串的正则表达式

白板的微信 2019-09-24 15:01:57

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


这个匹配


b

ab

1

这不匹配


a

ba

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


编辑:原始问题似乎不是我的案例的合法例子。那么:如何处理多个字符?说什么不以ab?结尾吗?


我已经可以使用以下线程解决此问题:


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

尽管这样做的缺点是,它与一个字符的字符串不匹配。


查看完整描述

3 回答

?
慕姐4208626

您没有给我们提供语言,但是如果您的正则表达式风味支持不在assert 后面,那么您需要:


.*(?<!a)$

(?<!a)是断言式的后置断言,可确保在字符串(或带m修饰符的行)结束之前没有字符“ a”。


看到这里Regexr


您还可以轻松地用其他字符扩展它,因为这会检查字符串并且不是字符类。


.*(?<!ab)$

这将匹配不以“ ab”结尾的任何内容,请在Regexr上查看


查看完整回答
反对 回复 2019-09-24
?
烧仙草VB

使用not(^)符号:


.*[^a]$

如果将^符号放在方括号的开头,则表示“除方括号外的所有内容”。$仅仅是末日的锚。


对于多个字符,只需将它们全部放在自己的字符集中:


.*[^a][^b]$


查看完整回答
反对 回复 2019-09-24
?
HUWWW

如果您使用grep或sed语法会有所不同。请注意,连续[^a][^b]方法在这里不起作用:


balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n'

jd8a

8$fb

q(c

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a]$"

8$fb

q(c

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^b]$"

jd8a

q(c

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^c]$"

jd8a

8$fb

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a][^b]$"

jd8a

q(c

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a][^c]$"

jd8a

8$fb

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a^b]$"

q(c

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a^c]$"

8$fb

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^b^c]$"

jd8a

balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^b^c^a]$"

FWIW,我在Regex101中发现了相同的结果,我认为这是JavaScript语法。


错误:https://regex101.com/r/MJGAmX/2

好:https://regex101.com/r/LzrIBu/2


查看完整回答
反对 回复 2019-09-24

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信