模块 6 · 第 2 课(共 4)课程中的22/32~10 min
模块课程(2/4)
负向前瞻:`(?!...)`
负向预测 (?!...) 是正向预测的黑暗姐妹:
它要求给定的模式不遵循当前位置。它是
仍然零宽度:不消耗任何字符。
Code
Pattern: \d+(?! euro)
Sample: Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
^^只有 75 匹配,因为它是唯一后面不跟的数字序列
euro。数字 100 和 25 后跟 euro,并且是
排除。
典型的负前瞻模式
^(?!.*errore).*$-- 不包含单词“errore”的行。\b(?!the\b)\w+\b-- 不是the的单词。(?!\s)-- 当前位置不是空格(可用作“修剪”)。
Code
Pattern: ^(?!.*\.bak$).*$
Sample (multiline with flag m):
foto.jpg
backup.bak
documento.txt
Match: foto.jpg, documento.txt (excludes backup.bak)通过负前瞻进行高级排除
负向先行 (?!...) 对于实现排除逻辑至关重要(例如验证密码是否不包含字典单词或标识符不是 class 或 function 等保留关键字)。
尝试一下
锻炼#regex.m6.l2.e1
尝试:0加载中...
查找后面没有“欧元”的每个数字(因此不包括欧元价格)。
正在加载编辑器...
显示提示
使用 (?! ...) 表示“不得遵循”。之后不得出现“euro”序列。
3 次尝试后可用的解决方案
复习练习
锻炼#regex.m6.l2.e2
尝试:0加载中...
查找至少包含 3 个字母的非“the”(不区分大小写)的每个单词。
正在加载编辑器...
显示提示
在 \\b 之后打开一个否定前瞻 (?!the\\b),仅排除单词 the。
3 次尝试后可用的解决方案
额外的挑战
锻炼#regex.m6.l2.e3
尝试:0加载中...
Find all words consisting of letters that do not contain the letter `x` at any position (e.g. match `test`, `game` but not `extra`, `box`).
正在加载编辑器...
显示提示
在单词边界 \\b 之后使用负前瞻 (?!\\w*x)。
3 次尝试后可用的解决方案