2012.04.10 13:58

(?=ABC)

Positive lookahead. Matches a group after your main expression without including it in the result.
ABC가 뒤에 따라 나오긴 해야되는데, 매칭에 포함시키지 않음.

"12ABC".match(/2(?=ABC)/)
["2"]

"123ABC".match(/2(?=ABC)/)
null

단, 앞으로는 안되미.

"ABC12".match(/(?=ABC)1/)
null


(?!ABC)

Negative lookahead. Specifies a group that can not match after your main expression (ie. if it matches, the result is discarded).
ABC가 뒤에 따라 나오면 안되긔.

"123ABC".match(/2(?!ABC)/)
["2"]

"12ABC".match(/2(?!ABC)/)
null

역시, 앞으로는 안되미.

"ABC12".match(/(?!ABC)12/)
["12"]





사용 가능한 기능표 ( 출처: https://www.regular-expressions.info/refadv.html )


FeatureSyntaxDescriptionExampleJavaJavaScript
Comment(?#comment)Everything between (?# and ) is ignored by the regex engine.a(?#foobar)b matches abnono
Branch reset group(?|regex)If the regex inside the branch reset group has multiple alternatives with capturing groups, then the capturing group numbers are the same in all the alternatives.(x)(?|(a)|(bc)|(def))\2matches xaaxbcbc, or xdefdef with the first group capturing x and the second group capturing abc, or defnono
Atomic group(?>regex)Atomic groups prevent the regex engine from backtracking back into the group after a match has been found for the group. If the remainder of the regex fails, the engine may backtrack over the group if a quantifier or alternation makes it optional. But it will not backtrack into the group to try other permutations of the group.a(?>bc|b)c matches abccbut not abcYESno
Positive lookahead(?=regex)Matches at a position where the pattern inside the lookahead can be matched. Matches only the position. It does not consume any characters or expand the match. In a pattern like one(?=two)three, both two and three have to match at the position where the match of one ends.t(?=s) matches the second tin streets.YESYES
Negative lookahead(?!regex)Similar to positive lookahead, except that negative lookahead only succeeds if the regex inside the lookahead fails to match.t(?!s) matches the first t in streets.YESYES
Positive lookbehind(?<=regex)Matches at a position if the pattern inside the lookbehind can be matched ending at that position.(?<=s)t matches the first t in streets.YESno
Negative lookbehind(?<!regex)Matches at a position if the pattern inside the lookbehind cannot be matched ending at that position.(?<!s)t matches the second t in streets.YESno
Lookbehind(?<=regex|longer regex)Alternatives inside lookbehind can differ in length.(?<=is|e)t matches the second and fourth t in twisty streets.YESn/a
Lookbehind(?<=x{n,m})Quantifiers with a finite maximum number of repetitions can be used inside lookbehind.(?<=s\w{1,7})t matches only the fourth t in twisty streets.6
4 fail
n/a
Lookbehind(?<=regex)The full regular expression syntax can be used inside lookbehind.(?<=s\w+)t matches only the fourth t in twisty streets.non/a
Lookbehind(group)(?<=\1)Backreferences can be used inside lookbehind. Syntax prohibited in lookbehind is also prohibited in the referenced capturing group.(\w).+(?<=\1) matches twisty street in twisty streets.non/a
Keep text out of the regex match\KThe text matched by the part of the regex to the left of the \Kis omitted from the overall regex match. Other than that the regex is matched normally from left to right. Capturing groups to the left of the \K capture as usual.s\Kt matches only the first tin streets.nono
Lookaround conditional(?(?=regex)then|else)where (?=regex) is any valid lookaround and then and else are any valid regexesIf the lookaround succeeds, the "then" part must match for the overall regex to match. If the lookaround fails, the "else" part must match for the overall regex to match. The lookaround is zero-length. The "then" and "else" parts consume their matches like normal regexes.(?(?<=a)b|c) matches the second b and the first c in babxcacnono
Implicit lookahead conditional(?(regex)then|else)where regexthen, and else are any valid regexes and regex is not the name of a capturing groupIf "regex" is not the name of a capturing group, then it is interpreted as a lookahead as if you had written (?(?=regex)then|else). If the lookahead succeeds, the "then" part must match for the overall regex to match. If the lookahead fails, the "else" part must match for the overall regex to match. The lookaround is zero-length. The "then" and "else" parts consume their matches like normal regexes.(?(\d{2})7|c) matches the first 7 and the c in 747cnono
Named conditional(?(name)then|else) where name is the name of a capturing group and then and else are any valid regexesIf the capturing group with the given name took part in the match attempt thus far, the "then" part must match for the overall regex to match. If the capturing group did not take part in the match thus far, the "else" part must match for the overall regex to match.(?<one>a)?(?(one)b|c)matches ab, the first c, and the second c in babxcacnono
Named conditional(?(<name>)then|else)where name is the name of a capturing group and then and else are any valid regexesIf the capturing group with the given name took part in the match attempt thus far, the "then" part must match for the overall regex to match. If the capturing group did not take part in the match thus far, the "else" part must match for the overall regex to match.(?<one>a)?(?(<one>)b|c)matches ab, the first c, and the second c in babxcacnono
Named conditional(?('name')then|else)where name is the name of a capturing group and then and else are any valid regexesIf the capturing group with the given name took part in the match attempt thus far, the "then" part must match for the overall regex to match. If the capturing group did not take part in the match thus far, the "else" part must match for the overall regex to match.(?'one'a)?(?('one')b|c)matches ab, the first c, and the second c in babxcacnono
Conditional(?(1)then|else) where 1is the number of a capturing group and then and else are any valid regexesIf the referenced capturing group took part in the match attempt thus far, the "then" part must match for the overall regex to match. If the capturing group did not take part in the match thus far, the "else" part must match for the overall regex to match.(a)?(?(1)b|c) matches ab, the first c, and the second c in babxcacnono
Relative conditional(?(-1)then|else) where -1 is a negative integer and then and else are any valid regexesConditional that tests the capturing group that can be found by counting as many opening parentheses of named or numbered capturing groups as specified by the number from right to left starting immediately before the conditional. If the referenced capturing group took part in the match attempt thus far, the "then" part must match for the overall regex to match. If the capturing group did not take part in the match thus far, the "else" part must match for the overall regex to match.(a)?(?(-1)b|c) matches ab, the first c, and the second c in babxcacnono
Forward conditional(?(+1)then|else) where +1 is a positive integer and then and else are any valid regexesConditional that tests the capturing group that can be found by counting as many opening parentheses of named or numbered capturing groups as specified by the number from left to right starting at the "then" part of conditional. If the referenced capturing group took part in the match attempt thus far, the "then" part must match for the overall regex to match. If the capturing group did not take part in the match thus far, the "else" part must match for the overall regex to match.((?(+1)b|c)(d)?){2}matches cc and cdb in bdbdccxcdcxcdbnono
Conditional(?(+1)then|else) where 1is the number of a capturing group and then and else are any valid regexesThe + is ignored and the number is taken as an absolute reference to a capturing group. If the referenced capturing group took part in the match attempt thus far, the "then" part must match for the overall regex to match. If the capturing group did not take part in the match thus far, the "else" part must match for the overall regex to match.(a)?(?(+1)b|c) matches ab, the first c, and the second c in babxcacnono
FeatureSyntaxDescriptionExampleJavaJavaScript




Posted by 아즈키

댓글을 달아 주세요

  1. Favicon of http://dev.azki.org BlogIcon 아즈키 2018.09.28 17:07 신고  댓글주소  수정/삭제  댓글쓰기

    ps. 자바에서는 앞으로 할 수 있는 옵션이 있음.

    (?=ABC) 의 경우 자바에서는 (?<=ABC) 로 앞에 쓸 수 있음.

    (?!ABC) 의 경우 자바에서는 (?<!ABC) 로 앞에 쓸 수 있음.