0.ãµã
ç¹å®ã®çåœãç¹å®ã®ç¶æ
ã§ã¯ãããã°ã©ããŒãããŸããã äºæ³éãã圌ã®ååã¯ã€ãŽã¡ã³ã§ããã 圌ã¯çã®å°é家ã§
ãããããã°ã©ããŒã®äžå€§çŸåŸ³ãã¹ãŠãææããŠããŸãããã€ãŸãã圌ã¯æ ãè
ã§ãrogæ
¢ã§ãçŠããŸããã ãã®çåœã§å€§ããªæ²ãã¿ãèµ·ãããŸããïŒå±æ©ã ãããŠã圌ãã¯éè·éãªãã§Vanyaãä»äºããè¿œãåºããã ãŽã¡ãã£ã¯é·ãéæ²ãã¿ãåæ°ãåºããäžçäžã«å±¥æŽæžãéããŸããã ã©ã®ãããã®æéãç°¡æœã«ã圌ãã¯ã€ã³ã¿ãã¥ãŒã®ããã«Vanyaã«é»è©±ããããŸããã ç³è«è
ã«ã¯å€ãã®èŠä»¶ããããŸããããäž»ãªããšã¯ã圌ãæ£èŠè¡šçŸã®è¯ãã³ãã³ããæã£ãŠããå¿
èŠããããšããããšã§ããã ã€ã³ã¿ãã¥ãŒã®1ãæè¿ãåã§ããæºåã¯ããããããŸããã çé¢ç®ãªäººã§ãããããIvanã¯è©³çŽ°ã«æºåããããšã«ããŸããã 3é±éãš3æ¥éã圌ã¯ã¹ããŒãã®äžã«æšªããããHabrãèªã¿ãå¿
ç¶çã«åŸ¹åºçã«æºåããæ¹æ³ãèããŸããã ã€ã³ã¿ãã¥ãŒã®1æ¥åã Vanyushaã¯éçšäž»ã粟ç¥çã«åªããŸãããéçšäž»ã¯é¢æ¥ãããã«äºå®ããŠããã®ã§ãæºåãã§ãããã¹ããŒãããéããŠããŒã«ç¶ãæž¡ããåçã®ããã«ã¬ãã¯ã¹ã®æ¬ãè²·ããŸããã 圌ã¯åœŒãåæãããŸã§ããã䜿ãæãããŠèªãã ã æãç§ãã¡ã¯ããã©ã«ãã®äžã®ãã®æ¬ã«ãæã®äžã«ãããã®ããã«ãããã¥ã·ã£ã®ç ã人çžã暪ããã£ãŠããã®ãèŠã€ããŸãã
1.ååž°
ã€ã³ã¿ãã¥ãŒã§ãã€ãŽã¡ã³ã¯ãã®ãããªä»äºãäžããããŸããã æ¬åŒ§ïŒ...ïŒå
ã®åŒãšäžèŽããæ£èŠè¡šçŸãèšè¿°ããŸããæ¬åŒ§å
ã«ã¯ãããããå
¥ãåã«ãªã£ãä»ã®æ¬åŒ§å
ã«å€ãã®åŒãããå ŽåããããŸãã äŸïŒãã§ãŒã³å
sin(2*pi/tan(.7+b*tanh(b/2)))+8*cos(b/4)
æ£èŠè¡šçŸã¯ããã©ã±ããã®æåã®ãã¢ã®å
容ãšäžèŽããïŒèŠã€ããïŒå¿
èŠããããŸãã
(2*pi/tan(.7+b*tanh(b/2)))
ãã ããæ£èŠè¡šçŸã¯ããã©ã±ããã®ãã©ã³ã¹ãåããŠããªããã§ãŒã³ã®éšåãšäžèŽããªãããã«ããå¿
èŠããããŸãïŒéããŠãããã©ã±ããã¯éãããéã«ãŸã£ããéããŠããªããã©ã±ããïŒã ããšãã°ããã§ãŒã³ã®åŠç
(sin(b/2)
æ£èŠè¡šçŸã¯
(b/2)
èŠã€ããå¿
èŠããããŸãã1çªç®ã®ãã©ã±ããã¯éããªããããç¡èŠããŸãã ãããŠæ¬¡ã®ãã§ãŒã³ã§
2*pi)*(r*r
ããã«ã¯ãæ£ãããæ¬åŒ§ã®ãã¢ããªããããæ£èŠè¡šçŸã¯äœãèŠã€ããå¿
èŠã¯ãããŸããã ãã1ã€ã®å¶éã¯ãã空ã®ãè§ãã£ã
()
ã«äžèŽããããšãçŠããŠããããšã§ããã€ãŸããè§ãã£ãå
ã«å°ãªããšãäžéšã®ã³ã³ãã³ããå¿
èŠã§ãã
ã€ãŸããæ¬åŒ§ã§å²ãŸãããæ£ãããåŒãšäžèŽããå¿
èŠããããŸããããã«ã¯ãæ¬åŒ§ä»ãã®éšååŒãå«ãŸããå Žåãããã空ã®æ¬åŒ§
()
æ£ãããšã¯èŠãªãããŸããã
ã€ã¯ã³ã¯ããããã®è¡šçŸãæžããå£ã²ããæ¯ãïŒ
1ïŒç®çã®è¡šçŸã¯æ¬åŒ§ã§å²ãŸãããã®ã§ãã
2ïŒè§ãã£ãå
ã«ã¯è§ãã£ãããªããã®ãããããã¹ãŠãã·ã³ãã«ã§ãïŒ
(3.14 * R * R)
...ãŸãã¯æ¬åŒ§å
ã®äœãïŒ
(2 * sin(pi/2))
ãããŠïŒ åŸè
ã®å Žåãæ¬åŒ§å
ã«ã¯ãæ¬åŒ§å
ã®äœããã§ã¯ãªããæåã«ãæ¬åŒ§ãªãã®äœãã
2 * sin
ãããããããããæ¬åŒ§å
ã®äœãã
(pi/2)
ãŸãã
ãããŠãæ¬åŒ§å
ã«ãæ¬åŒ§ãªãã®äœãããšãæ¬åŒ§å
ã®äœãããäœåºŠãçºçããå¯èœæ§ãããããšãæããã«ãªããŸãã
(2 * (a+8.5) * sin(pi/2) / (b - 1e-8))
ã
æ£èŠè¡šçŸèšèªã§ãè§æ¬åŒ§ãªãããèšå®ããã®ã¯éåžžã«ç°¡åã§ãïŒ
[^)(]+
ãéžæè¢ïŒè§æ¬åŒ§ãªãããŸãã¯è§æ¬åŒ§å
ã®äœãïŒãšã奜ããªã ãããèšå®ããæ¹æ³ãç°¡åã§ãïŒã¡ã¿ãã£ã©ã¯ã¿ãŒ|ããã³+ ããã£ãå
ã®äœãããšæ£èŠè¡šçŸèšèªã§ã®èšè¿°æ¹æ³
ãã«ãã³å
ã®äœãã...ãã«ãã³å
ã®äœãã...ãã§ã«åºäŒã£ãå Žæ...ãããããïŒãã€ã³ã
1ïŒç®çã®è¡šçŸã¯æ¬åŒ§å
ã®äœãã§ãã ãã®ãæ¬åŒ§å
ã®äœãããšã¯äœã§ããïŒ æ¢ããŠããåŒãæ¬åŒ§ã§å²ãŸããŠããå Žåãæ¬åŒ§ã§å²ãŸããŠããã®ã¯...æ¢ããŠããåŒã§ãïŒ ãŠãŒã¬ã«ïŒ
ãã®ãããªææ³ã¯ã€ãŽã¡ã³ã«èµ·ãããŸãïŒ
æ€çŽ¢åŒ:: =
ïŒ {åŒã®ãªãæ¬åŒ§|æ€çŽ¢åŒ} +
ïŒ+ã¯ã1å以äžããæå³ããŸãã{a | b}ã¯ãaãŸãã¯bããæå³ãã倪åã®æ¬åŒ§ã¯æ¬åŒ§èªäœã®æåãæå³ãã
ãã£ããªãã®åŒ:: =ãã£ã以å€ã®ä»»æã®æå+
ã€ãŸããç®çã®åŒã®å®çŸ©ã¯ååž°çã§ãã ããããæ£èŠè¡šçŸã®èšèªã§ãããæžãæ¹æ³ã¯ïŒ æ£èŠè¡šçŸã«èªåèªèº«ãå«ããããšã¯ã§ããŸããïŒ ã€ãŽã¡ã³ã¯ããã¯äžå¯èœã ãšæã£ãŠããã§ãããããããªãã¯å¿ããŠããŸãã-圌ã¯äžã¶æéäžçæžåœæºåãããŠããŸããïŒ åœŒã¯ãçŸä»£ã®æ£èŠè¡šçŸãšã³ãžã³ã§ã¯ãããå¯èœã§ããããšãæ³èµ·ããŸããïŒæ£èŠè¡šçŸå
ã®ã©ãã§ã
(?R)
æ£èŠè¡šçŸå
šäœãžã®ãªã³ã¯ãæå³ããŸãã Ivanã¯æ¬¡ã®æ£èŠè¡šçŸãèšè¿°ããŸãïŒ/ xã¹ã€ããã䜿çšãããšãæ¹è¡ãå«ããã¹ãŠã®ç©ºçœæåãèæ
®ããããïŒæåã®åŸã®ã³ã¡ã³ããå¯èœã«ãªããŸãïŒã
/
\( #
(
[^)(]+ # --
| #
(?R) #
)+ # 1
\) #
/x
Ivanã¯ããã§ãŒã³ã®ããã€ãã®äŸã䜿çšããŠæ£èŠè¡šçŸããã§ãã¯ããŸãïŒè¯ããã€ã³ã¿ãã¥ãŒã§ãã¹ãããã°ã©ã ãå®è¡ã§ããŸãããªã³ã©ã€ã³ã§ããã¥ã¡ã³ããèªãããšã¯ã§ããŸããïŒã
there are no parentheses here
(a + b)
sin((pi/180)*deg + theta)
1+(1+1/(1+1/(2+1/(1+1/(1+1/(4+1/(1+1/(1+1/(6+1/(1+1/(1+1/(8+1))))))))))))
sin)a - b(
sin(a - b(
sin(a * (b+1)
ãããŠãæ£èŠè¡šçŸã¯ããããã¹ãŠãæåŸ
éãã«åŠçããŸãã æºè¶³ããã€ãŽã¡ã³ã¯é¢æ¥å®ã«æ±ºå®ã瀺ããŸãã ããããŒãšã³ããã«ãŒãã³ïŒ ãããããªãèšäºã®ååã¯ãã®ãŸãŸã§ãã??
ã€ã³ã¿ãã¥ã¢ãŒã¯ã次ã®ãã§ãŒã³ã§æ£èŠè¡šçŸãæ€çŽ¢ããå¿
èŠãããå ŽåïŒå¿
èŠãªå ŽåïŒãå°ããŸãã
(you're gonna fail sonny unless you correct it (your regex)
èªãã§éãããããã¥ã·ã£ã¯ãç¬ãããããšãªããæåã®ãã©ã±ãããã©ãã§ãéããŠããªãã®ã§ãæ£èŠè¡šçŸã¯ãã©ã±ããã®2çªç®ã®ãã¢ãèŠã€ããå¿
èŠããããšçããŸãïŒïŒ
(your regex)
ã 圌ã¯ç¢ºèªããããã«æ±ããããŸãã Ivanã¯ãã®ãã§ãŒã³ãæ€èšŒã¹ã¯ãªããïŒPerlïŒã«çµã¿èŸŒã¿ãŸãã
#!/usr/bin/perl -wl
use strict;
my $string = "(you're gonna fail sonny unless you correct it (your regex)";
print $string;
if ( $string =~ / \( ( [^)(]+ | (?R) )+ \) /x ) {
print "Match: $&";
} else {
print "Not matched!"
}
æ§æã確èªããåŸãIvanã¯ã¹ã¯ãªãããå®è¡ããŸã...ãããŠäœãèµ·ãããŸãããã¹ã¯ãªããã¯ãããªãŒãºãããŠããããã§ãã 圌ã¯ã€ãšã¹ã§ãããŒã§ããªããšèšã£ãŠããŸãã ã€ãŽã¡ã³ãšã€ã³ã¿ãã¥ã¢ãŒã¯çŽ10ç§ééãã«èŠãŸããããã®éãã€ãŽã¡ã³ã¯æ·¡ããã³ã¯ããæ·¡ããã³ã¯ã«å€ãããŸãã ãããã圌ã¯äœãééããã®ã§ãã?? ãã®æç¹ã§ãã¹ã¯ãªãããèµ·åãããïŒãããŠäœããã®çç±ã§ãŸã å®äºããŠããªãïŒã©ãããããã¯ããããŸã§éãã«åäœããŠããŸããããã¯ã£ãããšéšãå§ããŸãã é¢åãªé·æéã®äžæåæ¢ãäžæããããã«ãã€ã³ã¿ãã¥ã¢ãŒã¯ã€ãŽã¡ã³ã«ãè¶ãŸãã¯ã³ãŒããŒãæäŸããŸãã ããã®éãããªãã¯ãã äœãééã£ãŠããã®ããèããŸãããšåœŒã¯ä»ãå ããŸãã ããã«30åãçµéãããšãIvanã¯ã³ãŒããŒ2æ¯ãšã¬ã¢ã³å
¥ãçŽ
è¶1æ¯ã飲ã¿ãŸãããã¹ã¯ãªããããªãç¥ç§çã«æ¯ãèãã®ãã¯ããããŸããã ã€ã³ã¿ãã¥ã¢ãŒã¯ã€ãŽã¡ã³ãšå¥ããçåžåžç¥ã®äººäºéšã®åŸæ¥å¡ã¯ãåè£è
ã¯ã€ã³ã¿ãã¥ãŒã®çµæã«å¿ããŠåŽäžãããããšèšããŠããã ãããŠããã€ã³ãã«è¡ããŸã
2.å£æ»
çãªããŒã«ããã¯
æ£èŠè¡šçŸIvanã¯ã©ããªããŸãããïŒ æ£èŠè¡šçŸã®ä»çµã¿ãç解ããŠã¿ãŸããã
/ \( ( [^)(]+ | (?R) )+ \) /x
ãéåœã®ãªãããã§ãŒã³
(you're gonna fail sonny unless you correct it (your regex)
- æ£èŠè¡šçŸã®äžæ¬åŒ§ã¯ããã§ãŒã³å
ã®ãã©ã±ãããšäžèŽããŸã
[^)(]+
äžèŽyou're gonna fail sonny unless you correct it
ã you're gonna fail sonny unless you correct it
ããé£ã¹ããããšãã§ããªãéå§ãã©ã±ããã«ãéæ¢ããyou're gonna fail sonny unless you correct it
ãªããŸã- 代æ¿ïŒ... | ...ïŒã¯ã貪欲ãªéæå®å+ãšãšãã«äœ¿çšããããããæ£èŠè¡šçŸãšã³ãžã³ã¯ïŒ... | ...ïŒãå床æ€çŽ¢ããããšããŸãã æåã®åå²
[^)(]+
éå§ãã©ã±ãããèŠãçŽåŸã®éžæè¢ïŒãäžèŽã§ããŸããããšèšã - ãšã³ãžã³ã¯2çªç®ã®éžæè¢
(?R)
ãŸãã ããã¯æåã¯æ£èŠè¡šçŸå
šäœã§ãã ãããŠããã§ãŒã³å
ã«æ®ã£ãŠã(your regex)
ã ãã¹ãŠãåçŽã§ãïŒãã©ã±ããïŒæ£èŠè¡šçŸå
ã¯ãã©ã±ãããšäžèŽïŒãã§ãŒã³å
ã [^)(]+
your regex
ãšäžèŽ[^)(]+
代æ¿ã®ãã®ä»ã®åºçŸïŒ... | ...ïŒãšã³ãžã³ã¯ãã§ãŒã³ã®æ®ãã®éšåã§ã¯æ€åºããŸããããã£ããªãããéãæ¬åŒ§ïŒããšã³ãžã³ã¯æ£èŠè¡šçŸã®éãæ¬åŒ§ïŒã«ç§»åããŸãããã§ãŒã³å
ã®æ¬åŒ§ïŒãšäžèŽããŸãã - ããŠããšã³ãžã³ã¯äœãšãå
ã®ãã§ãŒã³
(your regex)
éšå(?R)
- ãã§ãŒã³ã§ã¯ãæåãæ®ã£ãŠããŸããã§ããã ïŒ... | ...ïŒ+ã®éæå®åã¯è²ªæ¬²ã§ãæ£èŠè¡šçŸãšã³ãžã³ã¯å¥ã®ä»£æ¿ïŒ... | ...ïŒãèŠã€ããããšããŸãããæåããŸããïŒãã§ãŒã³ã®æ®ãã®ç©ºã®éšåã§ã¯ãäœãèŠã€ãããŸãããã©ã±ããããã©ã³ã
(?R)
ãéå§ã§ããéå§ãã©ã±ãããªã - ãããã£ãŠããã1ã€ã®éžæè¢ã¯èŠã€ãããŸããã ãŸãããã¹ãŠã®æ¬²ã¯å¢çãæããªããã°ãªããŸããã ãšã³ãžã³ã¯ãã³ã³ãã³ããã§ããããã§ãŒã³å
ã§ãã§ã«2ã€ã®éžæè¢ãèŠã€ãã£ãŠãããæ£èŠè¡šçŸã®æ¬¡ã®éšåã«é²ã¿ãŸãã ããã¯å³å€§æ¬åŒ§ã§ãïŒã ãã ãããã§ãŒã³ã«ã¯ãã©ã±ããã¯ãããŸããããã§ãŒã³ã§ã¯ãçŸæç¹ã§ã¯ãŸã£ãã空ã§ããæ£èŠè¡šçŸã®ä»¥åã®éšåã¯æ¢ã«ããŠã³ã解é€ãããŠããŸãã éãæ¬åŒ§ãæ£èŠè¡šçŸãšäžèŽããããã®ã¯äœããããŸããã
- æ£èŠè¡šçŸãšã³ãžã³ãããã«é²åããããã®ã¯äœã§ããïŒ éäŒããäžèŽããªããšèšããŸããïŒ ãŸããã 圌ã¯ãæ°éè©
[^)(]+
ã䜿çšããæåŸã®è¡šçŸã貪欲ã§ãããæ£èŠè¡šçŸã®æ¬¡ã®éšåã«äœãæ®ããã«ãé£ã¹éãããå¯èœæ§ãããããšãèŠããŠããŸããæ£èŠè¡šçŸãšã³ãžã³ã¯ããŒã«ããã¯ããŸãã - ãšã³ãžã³ã¯ãåå
[^)(]+
your regex
ãã§ãŒã³ããé£ã¹ããããšãæãåºããŸããã [^)(]+
匷å¶çã«1æåxãæ£èŠè¡šçŸã®æ¬¡ã®éšå[^)(]+
ãäžãããŸããã€ãŸãããã§ãŒã³ã¯æ®ããŸãïŒ x)
æ£èŠè¡šçŸã§ã¯ã代æ¿ïŒ... | ...ïŒ+ - K. +ã¯è²ªæ¬²ã§ããããããšã³ãžã³ã¯å¥ã®1ã€ã®ä»£æ¿ïŒ... | ...ïŒãèŠã€ããããšããŸãã代æ¿ã®æåã®ãã©ã³ã
[^)(]+
ã x
èšå·ã¯çŽ æŽãããäžèŽããŸãããã§ãŒã³ã«æ®ã£ãŠããŸãã
ããã¯éåžžã«é·ãéç¶ããããšãã§ããŸãããå®éã«ã¯ãåé¡ããã§ã«è¡šé¢åããŠããŸããããã¯æªã®æ ¹æºã§ãããæ£èŠè¡šçŸã®æ¬ é¥ã§ãã ãã§ãŒã³å
ã§ã人éã®èŠ³ç¹ããæ¬åŒ§ãªãã®1ã€ã®äžå¯åãªããŒã¯ã³ã§ããæ£èŠè¡šçŸãšã³ãžã³ã§ãæ£èŠè¡šçŸãšã³ãžã³ã¯2ã€ã®ããŒã¯ã³ãæ€åºããŸããïŒæ£èŠè¡šçŸ
[^)(]+
ã®ãç°ãªãã³ããŒãã«åæ£ããã
your rege
ããã³
x
ãœãŒã¹æ£èŠè¡šçŸïŒ
/ \( ( [^)(]+ | (?R) )+ \) /x
ãã¹ãŠããäœåãã§ããã§ãŒã³å
ã®èšå·ãïŒããŸãã¯ãïŒãã®ååšãå¿
èŠãšãããã®ãã¹ãŠïŒãããŠãæ£èŠè¡šçŸãã§ãŒã³ã«ã¯æããã«ãããã®èšå·ããããŸããïŒãæ®ã£ãŠãããã®ã¯ãã¹ãŠïŒ
/ ( [^)(]+ )+ /x
ãããŠãããã§åé¡ã¯ããã«æçœã«ãªããŸãã çµå±ã
your regex
ã¯
your regex
1ããŒã¯ã³ãšããŠãæ£èŠè¡šçŸãš
x
2ããŒã¯ã³ãšããŠããããŠã
you
ãš
r regex
ãšããŠã3ã4ã...ããŸãã¯10åã®åå¥ããŒã¯ã³ãšããŠãã¬ã€ã§ããŸãã
your regex
ãã§ãŒã³ãããŒã¯ã³ã«åå²
your regex
ãªãã·ã§ã³ã®æ°ã¯èšå€§ã§ãã æ£èŠè¡šçŸ
/ ( [^)(]+ )+ /x
ã¯ãå¿
èŠã«å¿ããŠããããã®ãªãã·ã§ã³ããã¹ãŠåæããããšãæå³ããŸãã ãã¹ããã§ãŒã³ããã§ãã¯ãããšãã«ããã«Ivanããã®åé¡ã«æ°ä»ããªãã£ãã®ã¯ãªãã§ããïŒ ãã®å Žåãéåžžã®
éããããŸããïŒãã§ãŒã³ãå£ãããã®ãªãã·ã§ã³ã®æ°ã¯èšå€§ã§ããããç Žå£ã®æåã®ããªãšãŒã·ã§ã³ïŒ[^ïŒïŒ] +ã貪欲ã§ãå
šäœãšããŠæ¬åŒ§ãªãã§ããã¹ãå
šäœããã£ããã£ãããšãïŒãæåããããšãå€æãããããæ£èŠè¡šçŸãšã³ãžã³
ã¯ããŒã«ããã¯ãã
å¿
èŠããããŸããã§ãã ã ã€ã³ã¿ãã¥ã¢ãŒã«ãã£ãŠäžãããããã§ãŒã³ã®å Žåãé·ãæååãããŒã¯ã³ã«åå²ãã1çªç®ã2çªç®ã100,000,000çªç®ã®ãªãã·ã§ã³ã®ããããäžèŽããªãã£ãããããã¹ãŠãæªåããŸãããããã§ã¯ãããŸããã§ããã ãã®ãããåŸè
ã®å Žåãæ£èŠè¡šçŸãšã³ãžã³ã¯ããŒã«ããã¯ãããŸããŸãå€ãã®åå²ãªãã·ã§ã³ãè©Šè¡ããŸããã劥åœãªæéå
ã«äžèŽãèŠã€ããããšã¯ãããŸããã ããã¯
å£æ»
çãªãã«ããã¯ãšåŒã°ããŸãã
3.ååã®ã°ã«ãŒãå
ãã®åé¡ãé²ãããšã¯ã§ããŸããïŒ ã¯ããéåžžã«ç°¡åã§ãã åé¡ã¯ããæããªãæ£èŠè¡šçŸãšã³ãžã³ãã®ãªã·ã£èªã®ã«ã¬ã³ããŒã«ããŒã«ããã¯ãããã®ã«å¯Ÿãã人ãç解ããã®ã¯äžèŠãããªãããšã§ããããŒã«ããã¯ã¯åœ¹ã«ç«ããªãããšã§ãã
your regex
ïŒããã³ãã§ãŒã³ã®åã®éšåïŒãéšåã«åå²ããããšã¯ãäžè¶³ããŠããéãæ¬åŒ§ãèŠã€ããã®ã«åœ¹ç«ã¡ãŸããã æ£èŠè¡šçŸãšã³ãžã³ã«äŒããæ¹æ³ããããŸãïŒããããå®å
šäžèŽã®æ¬ åŠã«ã€ãªããå Žåã§ãããã®å Žæã§ããŒã«ããã¯ãè©Šã¿ãªãã§ãã ãããã
(?> .....)
ããã¯ãã¢ãããã¯ã°ã«ãŒãåããšåŒã°ããããããã
(?>
ãš
)
éã®æ£èŠè¡šçŸã®éšåã§ã¯ãããŒã«ããã¯ã¯çŠæ¢ãããŠããŸãããšããæå³
(?>
ã ãŸãã¯ãããæ£ç¢ºã«ã¯ãå¥ã®æ¹æ³ã§ã
(?>X)
Xã¯æ£èŠè¡šçŸ
A(?>X)B
ãã倧ããæ£èŠè¡šçŸ
A(?>X)B
äžéšãšããŸãïŒAãšBãäœããã®æ£èŠè¡šçŸã§ãïŒã æåå
ab
ããã®å€§ããªæ£èŠè¡šçŸã®å
¥åã«éä¿¡ããŸããããã§ãaãšbã¯åäžã®æåã§ã¯ãªããæåã®ãã§ãŒã³ã§ãã 倧ããæ£èŠè¡šçŸã®æåã®éšåAãããã§ãŒã³aã®å¯Ÿå¿ïŒãotmatchilãïŒããã§ã«èŠã€ãããšããŸãã æ£èŠè¡šçŸãšã³ãžã³ã¯æ£èŠè¡šçŸïŒïŒ> XïŒã«é²ã¿ãåŠçããããã§ãŒã³ã§ã¯ãæåãã€ã³ã¿ãŒã¯ãã§ãŒã³aã®çŽåŸïŒããã³bã®çŽåïŒã«ç¶ããŸãã ãã®å Žåãã¢ãããã¯ã°ã«ãŒãåïŒïŒ> XïŒã¯ããã§ãŒã³bã絶察ã«ç¬ç«ããç¬ç«ããæ£èŠè¡šçŸXã«é©çšããããã®ããã«æ©èœããŸãã Xã¯ãç¥ããªããã®ã§ã圌ã®åŸã«ä»ã®æ£èŠè¡šçŸBããããã©ãããBãäœãããã¬ã€ã§ãããã©ããã¯æ°ã«ããŸããã Xã¯ã圌以å€ã«rexeãååšããªããã®ããã«åäœããŸãã ç¹ã«ãXã«è²ªæ¬²ãªéæå®åãå«ãŸããŠããå ŽåïŒ
(?> [^)(]+ )
ã¢ãããã¯ã°ã«ãŒãã¯ããã®ã貪欲ãªãéšåã®ããŒã«ããã¯ãèš±å¯ããŸããã
your regex
ãã§ãŒã³å
šäœãããã«ãã£ããã£ããå Žåã¯ã1ã€åã®ã¹ãããã§ã¯ãªããããããŠ
your regex
ïŒ
æ¬åŒ§å
ã®ããã¹ããèŠã€ããããã«æ£èŠè¡šçŸãå€æŽãããšãåé¡ã解決ããŸãã
/ \( (?> [^)(]+ | (?R) )+ \) /x
èšäº
Super-greedy quantifiers㧠ãæ°éè©++ã* +ãªã©ã調ã¹ãŸãããsuper-greedyæ°éè©ã¯ã¢ãããã¯ã°ã«ãŒãã®ç¹æ®ãªã±ãŒã¹ã§ããããšãããããŸãã ãŸããå
ã®æ£èŠè¡šçŸã®éæå®åãè¶
欲匵ãã«ããããšã§ãåãå¹æãåŸãããšãã§ããŸãïŒå£æ»
çãªããŒã«ããã¯ãåãé€ããŸãïŒã
/ \( ( [^)(]++ | (?R) )+ \) /x
ãŸãã¯ãã以äž
/ \( ( [^)(]++ | (?R) )++ \) /x
ãããç©èªã®çµããã§ããã誰ãèããã®ã...èè
ã«æ²ããŸããŠãã ãããèè
ã¯ãèšäºãæžãåã«ã説æãéåžžã«é·ãäžå®å
šã§ããããšããèããããŸããã§ããã ãããã誰ããäœããç解ããããã£ã®çµéšãç¹°ãè¿ããªãã£ãå Žåãããã¯ãã§ã«äœã䟡å€ããããŸãã