为了账号安全,请及时绑定邮箱和手机立即绑定

Regex前瞻、查找和原子组

Regex前瞻、查找和原子组

倚天杖 2019-06-01 10:50:04
Regex前瞻、查找和原子组我在我的食蚁兽身上发现了这些东西,但我不知道我能用它们做什么。有人有例子吗?我可以试着理解它们是如何工作的吗?(?!) - negative lookahead(?=) - positive lookahead(?<=) - positive lookbehind(?<!) - negative lookbehind(?>) - atomic group
查看完整描述

3 回答

?
达令说

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等)都需要有一个固定长度的前瞻性部分。

  • 原子组基本上在令牌匹配后丢弃/忘记组中的后续令牌。的示例,请查看此页。

    原子群


查看完整回答
反对 回复 2019-06-01
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

快速地环顾四周。
如何区分前瞻和后视?带我去2分钟的旅行:

(?=) - positive lookahead(?<=) - positive lookbehind

假设

    A  B  C #in a line

现在,我们问B,你在哪里?
B有两种方案来宣布它的位置:

第一,B前面有A,C有约束
第二,B在C的前面(放眼),后面(看后面)A。

正如我们所看到的,后面和前面的两个解决方案是相反的。
Regex是解决方案二。


查看完整回答
反对 回复 2019-06-01
  • 3 回答
  • 0 关注
  • 599 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信