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

标签 regex

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

这匹配

b
ab
1

这不匹配

a
ba

我知道正则表达式应该以 $ 结尾来标记结束,尽管我不知道它前面应该是什么。

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

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

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

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

最佳答案

您没有给我们语言,但如果您的正则表达式风格支持 look behind assertion ,这就是您所需要的:

.*(?<!a)$

(?<!a)是一个否定的后向断言,确保在字符串末尾(或带有 m 修饰符的行)之前不存在字符“a”。

查看here on Regexr

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

.*(?<!ab)$

这将匹配任何不以“ab”结尾的内容,see it on Regexr

关于不以给定后缀结尾的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398471/

相关文章:

jquery - 如何使用正则表达式从 jquery 中的 url 获取第一个查询字符串?

jquery - 如何为 "OR"条件 <TableName>dataTable().fnFilter 创建正则表达式

regex - 使用正则表达式来匹配字符串的变体

java - 正则表达式仅阻止数字或空格,但允许数字和空格作为输入

jquery - 返回匹配子字符串的数组

java - 如何执行不区分大小写的模式搜索和保留大小写的替换?

ruby -/\s/未转义的空格

ruby - 为什么我的正则表达式回溯在使用 Ruby 1.9 的 URL 上不起作用?

ruby - 仅使用起始标记捕获文本并且起始标记在一行中出现多次

javascript .replace 宽度标签