环视是一种非捕获分组,它根据某个模式之前或之后的内容匹配其他模式。环视也称为 零宽度断言(来自《学习正则表达式》书籍)。
环视的英文叫做 lookaround,这是在“精通正则表达式”一书中的叫法。在不同的书籍跟文档中,它又被叫做“断言”,“前视”,“预搜索”等。
通俗的说,环视就是我们要匹配某个特定的字符串时,要求该字符串之前、之后必须有某些字符,或者之前、之后不能出现某些字符。
例如:匹配单词“hello”,且后面必须紧跟“world”单词。如下图:
上图中,仅仅匹配了“hello world”文本中的“hello”文本。这里仅仅演示了目标匹配文本后面环视的情况,下面列出了前后、非前后环视:
假设要匹配某个单词“hello”,且要求紧随其后的单词是“world”
假设要匹配某个单词“hello”,且要求紧随其后的单词不是“world”
假设要匹配某个单词“world”,且要求其紧随前面的单词是“hello”
假设要匹配某个单词“world”,且要求其紧随前面的单词不是“hello”
正则表达式中,将上面四种描述情况给出了如下命名和语法:
正前瞻:也可称为“肯定顺序环视”,语法:(?=expresion) 意思为子表达式能够匹配右侧文本
反前瞻:也可称为“否定顺序环视”,语法:(?!expresion) 意思为字表达式不能匹配右侧文本
正后顾:也可称为“肯定逆序环视”,语法:(?<=expresion) 意思为子表达式能够匹配左侧文本
反后顾:也可称为“否定逆序环视”,语法:(?<!expresion) 意思为子表达式不能匹配左侧文本
上面四种类型的环视,将在后续章节进行详细介绍