PCRE රසය, 261 289 210 184 127 109 71 53 51 44 40 බයිට්
ඔව්, එය කළ හැකිය!
<^<()(?R){2}>\z|\1\Q^<()(?R){2}>\z|\1\Q>
එය මෙහි උත්සාහ කරන්න. (නමුත් /
Regex101 හි පරිසීමකය ලෙස දැක්වේ.)
කරුණාකර Regex101 පිටුවේ අනවශ්ය සංස්කරණයන් (යාවත්කාලීන කිරීම්) කිරීමෙන් වළකින්න. ඔබේ සංස්කරණයට ඇත්ත වශයෙන්ම මෙම රීජෙක්ස් වැඩි දියුණු කිරීම, උත්සාහ කිරීම හෝ පරීක්ෂා කිරීම ඇතුළත් නොවේ නම්, ඔබට එය දෙබලක තැබීමට හෝ ඔවුන්ගේ මුල් පිටුවෙන් නව ඒවා නිර්මාණය කිරීමට හැකිය .
අනුවාදය Regex101 (බයිට් 44) මත වඩාත් නිවැරදිව ක්රියා කරයි:
/^\/()(?R){2}\/\z|\1\Q^\/()(?R){2}\/\z|\1\Q/
එය මෙහි උත්සාහ කරන්න.
මෙය මුල් අනුවාදයට වඩා බෙහෙවින් සරල වන අතර සාම්ප්රදායික ක්වයින් වැනි වැඩ කරයි. එය නූල් භාවිතා නොකර නිර්වචනය කිරීමට උත්සාහ කරන අතර එය වෙනත් ස්ථානයක භාවිතා කරයි. එබැවින් එය රීජෙක්ස් හි එක් කෙළවරකට ඉතා ආසන්නව තැබිය හැකිය, ගැලපෙන රටාව නිර්වචනය කිරීම සඳහා වැඩි අක්ෂර අවශ්ය වන චරිත ගණන අඩු කිරීම සහ වැඩි වාර ගණනක් පුනරාවර්තනය කිරීම.
පැහැදිලි කිරීම්:
\Q^\/()(?R){2}\/\z|\1\Q
නූලට ගැලපේ ^\/()(?R){2}\/\z|\1\Q
. මෙය \Q...\E
වසා දැමිය යුතු නොවන විචක්ෂණතාවයක් භාවිතා කරන අතර , අනාරක්ෂිත පරිසීමක ක්රියා කරයි \Q
. මෙමඟින් පෙර සංස්කරණ ක්රියාත්මක වූයේ Regex101 මත පමණක් වන අතර එය දේශීයව නොවේ. නමුත් වාසනාවකට මෙන් නවතම අනුවාදය ක්රියාත්මක වූ අතර මම මෙය භාවිතා කරමින් තවත් බයිට් කිහිපයක් ඉවත් කළෙමි.
\1
\Q
අල්ලා ගත් කණ්ඩායමට ගැලපීමට පෙර 1. මෙම විකල්පය තුළ 1 වන කාණ්ඩය නොපවතින බැවින්, එය ගැලපෙන්නේ පුනරාවර්තන ඇමතුම් වල පමණි. පුනරාවර්තන ඇමතුම් වලදී එය හිස් නූල් වලට ගැලපේ.
(?R){2}
මුළු රිජෙක්ස් එක දෙවරක් පුනරාවර්තන ලෙස අමතයි, එය ^\/()(?R){2}\/\z|\1\Q
එක් එක් කාලයට ගැලපේ .
()
1 වන කාණ්ඩයට හිස් නූලක් අල්ලා ගැනීම හැර වෙන කිසිවක් නොකරයි, එමඟින් පුනරාවර්තන ඇමතුම් වල අනෙක් විකල්පය සක්රීය කරයි.
^\/()(?R){2}\/\z
(?R){2}
ආරම්භයේ සිට අවසානය දක්වා එකතු කරන ලද පරිසීමක සමඟ ගැලපීම් . මෙම \/
ද එය වැල මුල දී වනු ඇත නිසා වග බලා ගන්න මෙම විකල්පය ම, ආවර්තනික ඇමතුම් තුළ නොගැලපේ ලද ආවර්තනික ඇමතුම් පෙර.
සංවෘත බයිට් 51 ක් \Q...\E
:
/\QE\1|^\/(\\)Q(?R){2}z\/\E\1|^\/(\\)Q(?R){2}z\/\z/
එය මෙහි උත්සාහ කරන්න.
මුල් අනුවාදය, බයිට් 188 යි
බයිට් 100 ක් පමණ ගොල්ෆ් කිරීම ගැන මාටින් බොට්නර්ට ස්තූතියි!
/^(?=.{173}\Q\2\)){2}.{11}$\E\/\z)((?=(.2.|))\2\/\2\^\2\(\2\?=\2\.\2\{173}\2\\Q\2\\2\2\\\2\)\2\)\2\{2}\2\.\2\{11}\2\$\2\\E\2\\\2\/\2\\z\2\)\2\(\2\(\2\?=\2\(\2\.2\2\.\2\|\2\)\2\)){2}.{11}$/
එය මෙහි උත්සාහ කරන්න.
හෝ නැතිව බයිට් 210 \Q...\E
:
/^(?=.{194}\\2\\.\)\{2}\.\{12}\$\/D$)((?=(.2.|))\2\/\2\^\2\(\2\?=\2\.\2\{194}\2\\\2\\2\2\\\2\\\2\.\2\\\2\)\2\\\2\{2}\2\\\2\.\2\\\2\{12}\2\\\2\$\2\\\2\/D\2\$\2\)\2\(\2\(\2\?=\2\(\2\.2\2\.\2\|\2\)\2\)){2}.{12}$/D
එය මෙහි උත්සාහ කරන්න.
පුළුල් කළ අනුවාදය:
/^(?=.{173}\Q\2\)){2}.{11}$\E\/\z) # Match things near the end.
((?=(.2.|)) # Capture an empty string or \2\ into group 2.
\2\/\2\^\2\(\2\?=\2\.\2\{173}\2\\Q\2\\2\2\\\2\)\2\)\2\{2}\2\.
\2\{11}\2\$\2\\E\2\\\2\/\2\\z\2\) # 1st line escaped.
\2\(\2\(\2\?=\2\(\2\.2\2\.\2\|\2\)\2\) # 2nd line escaped.
){2}
.{11}$/x
වැනි දිගු (?=
හා \1
ද quines හැකි වන කරයි, තවදුරටත් විධිමත් ඊනියා "සාමාන්ය" ප්රකාශන කර ඇත. පසු විපරම නිත්ය නොවේ, නමුත් බැලූ බැල්මට පෙනේ.
පැහැදිලි කිරීම:
- මම භාවිතා
\2\
වෙනුවට \
විශේෂ අක්ෂර පැන. නම් \2
තරග හිස් නූල්, \2\x
(එහිදී x
විශේෂ චරිතයක්) එම තරග x
ම. නම් \2
තරග \2\
, \2\x
බේරී එක් තරග. \2
1 වන කාණ්ඩයේ තරඟ දෙකෙහිදී රීජෙක්ස් හි වෙනස් විය හැකිය. පළමු වරට \2
හිස් නූලට අනුරූප විය යුතු අතර දෙවන වරට \2\
.
\Q\2\)){2}.{11}$\E\/\z
(1 වන පේළිය) අවසානයේ සිට අක්ෂර 15 කට ගැලපේ. සහ .{11}$
(7 වන පේළිය) අවසානයේ සිට අක්ෂර 11 ක් ගැලපේ (හෝ පසුපස නව රේඛාවකට පෙර). එබැවින් දෙවන රටාවට පෙර රටාව පළමු රටාවේ පළමු අක්ෂර 4 හෝ 3 ට අනුරූප \2\.\2\|\2\)\2\)
විය යුතුය , එබැවින් ගැලපිය යුතුය ...\2\)
හෝ ...\2\
. අන්තිම චරිතය විය යුතු නිසා පසුපස නව රේඛාවක් තිබිය නොහැක )
. ගැලපෙන පා text )
යේ දකුණු පසට පෙර තවත් එකක් අඩංගු නොවේ , එබැවින් අනෙක් සියලුම අක්ෂර තිබිය යුතුය \2
. \2
ලෙස අර්ථ දක්වා ඇති (.2.|)
බැවින් එය විය හැක්කේ එය පමණි \2\
.
- සෑම දෙයක්ම ස්ථාවර දිගක් ඇති බැවින් පළමු පේළියේ මුළු ප්රකාශනයම අක්ෂර 188 ට ගැලපේ. 1 වන කාණ්ඩයේ දෙවරක් අක්ෂර 45 * 2 ක් සහ 29 වතාවක් ගැලපේ
\2
. 1 වන කාණ්ඩයට පසුව ඇති දේවල් අක්ෂර 11 ට ගැලපේ. එබැවින් වාර දෙකේ මුළු දිග \2
හරියටම අක්ෂර 3 ක් විය යුතුය. \2
දෙවන වරට දැන ගැනීම අක්ෂර 3 ක් දිග වන අතර එය පළමු වරට හිස් විය යුතුය.
- බැලූ බැල්මට හැර අනෙක් සියල්ල
\2
1 වන කාණ්ඩයේ වචනාර්ථයන් වේ. දෙවරක් \2
දන්නා සහ පළමු පේළියේ සිට දන්නා අවසාන අක්ෂර කිහිපය සමඟ මෙම රීජෙක්ස් හරියටම එක් නූලකට ගැලපේ.
- මාටින් බොට්නර්ගේ අදහස වන්නේ 2 වන කණ්ඩායම අල්ලා ගැනීමට සහ එය ක්වයින් කොටස සමඟ අතිච්ඡාදනය කිරීමට ලුක්හෙඩ් භාවිතා කිරීමයි. මෙමඟින් 1 වන කාණ්ඩයේ අවස්ථා දෙක අතර සාමාන්ය ආකාරයෙන් ගැලවී නොතිබූ අතර මගේ මුල් අනුවාදයට ගැලපෙන රටාව වළක්වා ගැනීමට උපකාරී වන අතර රීජෙක්ස් බොහෝ සරල කළේය.
පුනරාවර්තන හෝ පසු විපරම් නොමැතිව රීජෙක්ස්, බයිට් 85 ක්
පුනරාවර්තන හෝ පසු විපරම් සහිත ප්රකාශන සැබෑ “නිත්ය” ප්රකාශන නොවන බව යමෙකු තර්ක කළ හැකිය. සාම්ප්රදායික නිත්ය ප්රකාශන මගින් ප්රකාශ කළ හොත් ඒවා වඩා දිගු විය හැකි නමුත්, බැලූ බැල්මට පමණක් ඇති ප්රකාශන තවමත් සාමාන්ය භාෂාවන්ට පමණක් ගැලපේ.
/(?=.*(\QE\\){2}z\/\z)^\/\(\?\=\.\*\(\\Q.{76}\E\\){2}z\/\z)^\/\(\?\=\.\*\(\\Q.{76}\z/
එය මෙහි උත්සාහ කරන්න.
නැතිව බයිට් 610 ක් \Q...\E
(ගොල්ෆ් කිරීමට):
/^(?=.{610}$)(?=.{71}(\(\.\{8\}\)\?\\.[^(]*){57}\)\{2\}\.\{12\}\$\/D$)((.{8})?\/(.{8})?\^(.{8})?\((.{8})?\?=(.{8})?\.(.{8})?\{610(.{8})?\}(.{8})?\$(.{8})?\)(.{8})?\((.{8})?\?=(.{8})?\.(.{8})?\{71(.{8})?\}(.{8})?\((.{8})?\\(.{8})?\((.{8})?\\(.{8})?\.(.{8})?\\(.{8})?\{8(.{8})?\\(.{8})?\}(.{8})?\\(.{8})?\)(.{8})?\\(.{8})?\?(.{8})?\\(.{8})?\\(.{8})?\.(.{8})?\[(.{8})?\^(.{8})?\((.{8})?\](.{8})?\*(.{8})?\)(.{8})?\{57(.{8})?\}(.{8})?\\(.{8})?\)(.{8})?\\(.{8})?\{2(.{8})?\\(.{8})?\}(.{8})?\\(.{8})?\.(.{8})?\\(.{8})?\{12(.{8})?\\(.{8})?\}(.{8})?\\(.{8})?\$(.{8})?\\(.{8})?\/D(.{8})?\$(.{8})?\)(.{8})?\(){2}.{12}$/D
එය මෙහි උත්සාහ කරන්න.
අදහස සමාන ය.
/^(?=.{610}$)(?=.{71}(\(\.\{8\}\)\?\\.[^(]*){57}\)\{2\}\.\{12\}\$\/D$)
((.{8})?\/(.{8})?\^(.{8})?\((.{8})?\?=(.{8})?\.(.{8})?\{610(.{8})?\}(.{8})?\$(.{8})?\)
(.{8})?\((.{8})?\?=(.{8})?\.(.{8})?\{71(.{8})?\}
(.{8})?\((.{8})?\\(.{8})?\((.{8})?\\(.{8})?\.(.{8})?\\(.{8})?\{8(.{8})?\\(.{8})?\}
(.{8})?\\(.{8})?\)(.{8})?\\(.{8})?\?(.{8})?\\(.{8})?\\
(.{8})?\.(.{8})?\[(.{8})?\^(.{8})?\((.{8})?\](.{8})?\*(.{8})?\)(.{8})?\{57(.{8})?\}
(.{8})?\\(.{8})?\)(.{8})?\\(.{8})?\{2(.{8})?\\(.{8})?\}
(.{8})?\\(.{8})?\.(.{8})?\\(.{8})?\{12(.{8})?\\(.{8})?\}
(.{8})?\\(.{8})?\$(.{8})?\\(.{8})?\/D(.{8})?\$(.{8})?\)(.{8})?\(){2}.{12}$/D
මූලික නිත්ය ප්රකාශනය
බැලීමේ අවසරය නොමැති නම්, මට දැන් කළ හැකි හොඳම දේ:
/\\(\\\(\\\\){2}/
ගැලපෙන
\\(\\\(\\
නම් {m,n}
quantifier අවසර නැත එකම එක string ගැලපෙන හැකි කිසිවක්, තවදුරටත් තමාට වඩා වැලක් ගැලපෙන කර ගත හැකි නිසා., එය කළ නොහැකි ය ඇත්ත වශයෙන්ම කෙනෙකුට තවමත් \q
ගැලපෙන දෙයක් නිර්මාණය කළ හැකි /\q/
අතර, එම නිත්යය සමඟ ප්රකාශන තවමත් කියන්න. නමුත් පෙනෙන ආකාරයට මේ කිසිවක් ප්රධාන ක්රියාත්මක කිරීම් වලට සහාය නොදක්වයි.