Prelude
Ruby, , , , . , , , (, javascript) , Ruby. Perl, Sublime Text .
...
: ! !
, ... . ,
- .
, :
, (group_contents), (?<group_name>group_contents). , .
, , \g<group_name_or_number>. :
(?<three_letter_word>\b\w{3}\b) \g<three_letter_word>
xyz abc.
, {0} . , , . :
(?<even>[02468]){0}7\g<even>8\<even>9\<even>0
7x8y9z0, x, y z .
, lookbehinds . , (, java), . , (?<=x*).
\K . , \K , , . , (?<=x*)y x*\Ky.
, .
-, "" ( № 3).
- ", (\). , (aka \\= ).
, \\{2}* (aka two back slashes zero or more times - 2 * n). , - \\\\{2}* (2 * n + 1).
, . , , , . \\\" , \\", . , lookbehind : (?<!\\)\\\\{2}*
escaped_quote "" :
(?<escaped_quote>(?<!\\)\\\\{2}*"){0}
- non_quoting
, , - . , .
, lookahead escaped_quote. , \ escaped_quote, .
(?<non_quoting>(?:\g<escaped_quote>|(?!\g<escaped_quote>)[^"])*){0}
- balanced_quotes
"", , - , . , :
(?<balanced_quotes>\g<non_quoting>|(?:\g<non_quoting>"\g<non_quoting>){2}+){0}
.
. . , . (?:^|")
: , . , , \K lookbehind. , - . , , , : (?:^|"|)
non_quoting, ( # 4) :
(?:^|"|)\g<non_quoting>"\K
non_quoting:
(?:^|"|)\g<non_quoting>"\K\g<non_quoting>
, , balanced_quotes :
(?:^|"|)\g<non_quoting>"\K\g<non_quoting>(?="\g<balanced_quotes>$)
!
"" , :
(?<escaped_quote>(?<!\\)\\\\{2}*"){0}(?<non_quoting>(?:\g<escaped_quote>|(?!\g<escaped_quote>)[^"])*){0}(?<balanced_quotes>\g<non_quoting>|(?:\g<non_quoting>"\g<non_quoting>){2}+){0}(?:^|"|)\g<non_quoting>"\K\g<non_quoting>(?="\g<balanced_quotes>$)
, regex, , . , , \K.
, , .