微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式前瞻,后瞻和原子组

我发现这些东西在我的正则表达式的身体,但我没有一个线索,我可以使用它们。
有人有例子,所以我可以尝试了解它们如何工作吗?
(?!) - negative lookahead
(?=) - positive lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind

(?>) - atomic group
回环是零宽度断言。他们检查正则表达式(向前或向左的当前位置 – 基于前面或后面),成功或失败,当找到匹配(基于它是正面还是负面),并丢弃匹配的部分。它们不消耗任何字符 – 跟随它们的正则表达式(如果有的话)的匹配将在相同的光标位置开始。

有关详细信息,请参阅regular-expression.info

>积极前瞻:

句法:

(?=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确保字符串匹配一些其他规则。没有前瞻,它将匹配长度为三或五的字符串。

>负面前瞻

句法:

(?!REGEX_1)REGEX_2

仅当REGEX_1不匹配时匹配;在检查REGEX_1之后,搜索REGEX_2在相同位置开始。

例:

(?!.*\bFWORD\b)\w{10,30}$

前瞻部分检查字符串中的FWORD,如果找到则失败。如果没有找到FWORD,则前瞻成功,并且以下部分验证字符串的长度在10和30之间,并且它只包含字符字符a-zA-Z0-9_

Look-behind与look-ahead类似:它只是在当前光标位置的后面。一些正则表达式风格像javascript不支持后瞻断言。支持它的大多数风格(PHP,Python等)要求后备部分具有固定长度。

>原子组基本上丢弃/忘记组中的后续令牌,一旦令牌匹配。检查此页面的例子atomic groups

原文地址:https://www.jb51.cc/regex/358474.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐