3 回答
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
TA贡献1821条经验 获得超6个赞
查找是零宽度断言。他们检查一个正则表达式(对当前位置的右或左-基于前面或后面),在找到匹配时(基于正还是负)成功或失败,并丢弃匹配的部分。它们不使用任何字符-后面的正则表达式的匹配(如果有的话)将从相同的光标位置开始。
- 积极展望:
语法:
(?=REGEX_1)REGEX_2
只有在REGEX_1匹配时才匹配;匹配REGEX_1之后,将丢弃该匹配,并从相同位置开始搜索REGEX_2。
例子:
(?=[a-z0-9]{4}$)[a-z]{1,2}[0-9]{2,3}
REGEX_1是[a-z0-9]{4}$
它匹配四个字母数字字符,后面跟着行尾。
REGEX_2[a-z]{1,2}[0-9]{2,3}
它匹配一个或两个字母,后面跟着两个或三个数字。
REGEX_1确保字符串的长度确实是4,但不消耗任何字符,因此REGEX_2的搜索从相同的位置开始。现在,REGEX_2确保字符串与其他规则匹配。如果不向前看,它将匹配长度为3或5的字符串。
- 负前瞻
语法:
(?!REGEX_1)REGEX_2
只有在REGEX_1不匹配的情况下才匹配;在检查REGEX_1之后,对REGEX_2的搜索将从相同的位置开始。
例子:
(?!.*\bFWORD\b)\w{10,30}$
前瞻部分检查FWORD
在字符串中,如果它找到它,就会失败。如果它找不到FWORD
,前瞻成功,下面的部分将验证字符串的长度是否介于10到30之间,并且只包含单词字符。a-zA-Z0-9_
向后看类似于向前看:它只是看在当前光标位置的后面.像javascript这样的regex版本不支持前瞻性断言。而大多数支持它的风格(PHP、Python等)都需要有一个固定长度的前瞻性部分。
![?](http://img1.sycdn.imooc.com/54584eff000195a302200220-100-100.jpg)
TA贡献1802条经验 获得超4个赞
(?=) - positive lookahead(?<=) - positive lookbehind
A B C #in a line
- 3 回答
- 0 关注
- 641 浏览
添加回答
举报