正则表达式 - 字符匹配不以某字段开头或者结尾

我的博文地址: https://www.luoyangfu.com/art...

最近有一个需求,要求是判断某个字符串不以什么开头。然后就开始探索这个不以什么开头和不易什么结尾的正则怎么写,why?

不以某字符串开头

这里需要提一个概念叫 否定式前项匹配 这个东东。

向前匹配

根据匹配的字符序列后面存在一个特定的字符序列或者不存在一个特定的序列来决定是否匹配。对于向前匹配,出现在指定项后面的字符序列不会被正则表达式返回。

这里说后面存在一个特定字符序列, 也称之为肯定式向前查找
不存在一个特定的序列,也称之为否定式向前查找
这两个概念后续再深入

开始解决这个问题不以某字符串开头:

^(?!str)

这里使用了下面几个元符号:

  1. ^ 判断是否是开头
  2. ?! 这里是否定向前查询

示例:

  1. 不以test 开头字符串
/^(?!test).*/

正则表达式 - 字符匹配不以某字段开头或者结尾

不以某字符串结尾

这里要说一个概念叫 否定式向后匹配,前面说了向前匹配,想后匹配呢?

向后匹配

一个要匹配的字符串序列前面有或者没有指定的字符串序列

这里有指定字符串序列也叫 肯定式向后匹配
这里没有指定字符串序列也叫 否定式向后匹配
这两个概念后续深入

解决不以某字符串结尾:

(?<!str)$

这里用了如下几个符号:

  1. ?<! 否定式向后查询
  2. $ 是否结尾

示例:

不以 end 结尾

/.*(?<!end)$/

正则表达式 - 字符匹配不以某字段开头或者结尾

收集几个 ? 元字符用法

(?:str)   非捕获组

(?=str) 肯定式向前查找

(?!str) 否定式向前查找

(?<=str) 肯定式向后查找

(?<!str) 否定式向后查找

参考地址:

https://blog.csdn.net/LinBili...
https://blog.csdn.net/libingx...

相关推荐