非获取匹配

前言

本章节主要介绍,正则表达式中关于非获取匹配的详细介绍及使用方法
与上一篇的获取匹配不同的是,非获取匹配不会形成组,却保留了优先级运算的能力

变量定义

  • pattern: 任意长度的正则表达式

一般模式

  • (?:pattern): 匹配指定内容,不形成组,一般和或运算搭配使用
"com(?:puter|pare)": 可以匹配"computer"和"compare",  但不能匹配"complete"
注意: 不可在"[]"中使用, 否则将会解释为单个字符"("和"?"和":"和")"
注意: 如果待匹配内容是"computer", "com(?:puter|pare)"的匹配结果是"computer", "com(puter|pare)"的匹配结果是"puter"

预查模式

所谓预查,即提前判断某区域是否为某指定内容,但不消耗字符内容,从预查位置开始下次搜索

  • (?=pattern): 正向肯定预查,一般用于后缀的肯定判断
"app(?=le|lication)": 当待匹配内容为"apple"或"application", 可以匹配出"app"; 当待匹配内容为"appear", 则无匹配结果
注意: 不可在"[]"中使用, 否则将会解释为单个字符"("和"?"和"="和")"
  • (?!pattern): 正向否定预查,一般用于后缀的否定判断
"app(?!le|lication)": 当待匹配内容为"apple"或"application", 无匹配结果; 当待匹配内容为"appear", 可以匹配出"app"
注意: 不可在"[]"中使用, 否则将会解释为单个字符"("和"?"和"!"和")"
  • (?<=pattern): 反向肯定预查,一般用于前缀的肯定判断
"(?<=w|t)here": 当待匹配内容为"where"或"there", 可以匹配出"here"; 当待匹配内容为"inhere", 则无匹配结果
注意: 不可在"[]"中使用, 否则将会解释为单个字符"("和"?"和"<"和"="和")"
注意: 在某些编程语言中, 需要保证单词长度一致. 例如"(?<=pp|tt)"是可行的, "(?<=pp|ttt)"是不可行的
  • (?<!pattern): 反向否定预查,一般用于前缀的否定判断
"(?<!w|t)here": 当待匹配内容为"where"或"there", 无匹配结果; 当待匹配内容为"inhere", 可以匹配出"here"
注意: 不可在"[]"中使用, 否则将会解释为单个字符"("和"?"和"<"和"!"和")"
注意: 在某些编程语言中, 需要保证单词长度一致. 例如"(?<!pp|tt)"是可行的, "(?<!pp|ttt)"是不可行的