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