C++ Boost

Regex++, Appendices.

Copyright (c) 1998-2001

Dr John Maddock

Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Dr John Maddock makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.


Appendix 1: Implementation notes

$B$3$l$O(B boost $B%i%$%V%i%j$X(B regex++ $B$rF3F~$7$?:G=i$N$b$N$G$"$j!"(B regex++ 2.x $B$K4p$E$$$F$$$k!#(B $B0JA0$N%P!<%8%g%s$+$i$NJQ99$N40A4$J%j%9%H$K$D$$$F$O(B changes.txt $B$r8+$h!#(B Win32 $BCO0h2=%b%G%k(B (Win32 $B$K$*$1$k%G%U%)%k%H$N%i%$%V%i%j9=C[(B) $B$,;H$o$l$F$$$k$H$-$N$_!"(BPOSIX $B%9%?%$%k$NEy2A%/%i%9$,@5$7$$$3$H$rJ]>Z$5$l$k!"(B $B$H$$$&E@$r=|$1$P!"5!G=E*$J%P%0$O8+$D$+$C$F$$$J$$!#(B

C++ $B?.l9g$O!"$*$=$i$/$h$jCY$/$J$k$@$m$&$,!#(B

$B%"%k%4%j%:%`$N%Q%U%)!<%^%s%9$OB?$/$N>l9g!"==J,$G$"$k$@$m$&!#(B $BNc$($P!"(B ftp $B%l%9%]%s%9$NI=8=(B "^([0-9]+)(\-| |$)(.*)$" $B$,J8;zNs(B "100- this is a line of ftp response which contains a message string" $B$K0lCW$9$k$N$K$+$+$k;~4V$O(B: BSD $B$N

$B$7$+$7!"0lCWH=Dj$K;X?t%*!<%@$rI,MW$H$9$k!"(B "$BIBE*$J(B" $B@55,I=8=$,$"$k$3$H$b=R$Y$F$*$+$J$1$l$P$J$i$J$$$@$m$&!#(B $B$3$l$i$OA4$F!"%M%9%H$5$l$?7+$jJV$71i;;;R$K$^$D$o$k$b$N$G$"$k!#(B $BNc$($P!"@55,I=8=(B "(a*a)*b" $B$r(B N $BJ8;z$N(B a $B$K0lCW$5$;$k$K$O!"(B 2N $B$KHfNc$7$?;~4V$rI,MW$H$9$k!#(B $B$3$l$i$NI=8=$O(B $BLdBj$rHr$1$k$?$a$K!"(B($B$[$H$s$I(B) $B$$$D$b!"JL$NJ}K!$G=q$-D>$9$3$H$,=PMh$k!#(B $BNc$($P!"(B "(a*a)*b" $B$O(B "a*b" $B$H$7$F=q$-D>$9$3$H$,=PMh$k!#(B $B$3$l$O!"0lCW$r2r7h$9$k$N$K(B N $B$K@~7AE*$KHfNc$7$?;~4V$7$+$+$+$i$J$$!#(B $B0lHLE*$K!"%M%9%H$5$l$F$$$J$$7+$jJV$7I=8=$O(B N2 $B$KHfNc$9$k;~4V$rI,MW$H$9$k!#(B $B$7$+$7!"$b$76g$,Aj8_GSB>E*$J$i@~7A%*!<%@$N;~4V$G0lCW$5$;$k$3$H$,2DG=$G$"$k!#(B $B$3$l$O!"(B"a*b" $B$N>l9g$G$"$k!#$=$l$>$l$NJ8;z$KBP$7$F!"(B $B0lCWH=Dj$O(B "a" $B$+(B "b" $B$+<:GT$N$$$:$l$+$G$"$k!#(B $B0lJ}!"(B"a*a" $B$G$OJ}$r;n$5$J$1$l$P$J$i$J$$!#(B $B@55,I=8=$r$I$&=q$/$+$K==J,Cm0U$7$?J}$,$h$$!#(B $B$=$7$F!"$b$72DG=$J$i%M%9%H$7$?7+$jJV$7$rHr$1$k$Y$-$G$"$k!#(B $B$3$N%P!<%8%g%s$G$N?7$7$$E@$H$7$F!"0JA0$G$N$$$/$D$+$NIBE*$J%1!<%9$OD>$C$F$$$k!#(B $BFC$K!"@h9T$9$k7+$jJV$7$d@h9T$9$k%j%F%i%kJ8;zNs$r4^$`@55,I=8=$N8!:w$O!"(B $B0JA0$KHf$Y$+$J$jB.$/$J$C$?$H;W$&!#(B $B%j%F%i%kJ8;zNs$KBP$7$F$O:#$O(B Knuth/Morris/Pratt $B%"%k%4%j%:%`$r;H$C$F8!:w$5$l$F$$$k(B ($B$3$l$O(B BM $BK!$h$j9%$s$G;H$o$l$k!#$J$<$J$i!"2~9TJ8;z$NDI@W$,2DG=$@$+$i$G$"$k(B)$B!#(B

POSIX $B@55,I=8=9=J8$N$$$/$D$+$NE@$O!"$h$jL@3N$K


Appendix 2: $B%9%l%C%I0BA4@-(B

$B%/%i%9(B reg_expression<> $B$H$=$N(B typedef $B$G$"$k(B regex $B$H(B wregex $B$O%9%l%C%I0BA4@-$r

POSIX API $B4X?t$OA4$F:FF~2DG=$G%9%l%C%I%;!<%U$G$"$k!#(B regcomp $B$rH<$C$F%3%s%Q%$%k$5$l$?@55,I=8=$b0[$J$k%9%l%C%I4V$G6&M-2DG=$G$"$k!#(B

$B%/%i%9(B RegEx $B$O$=$l$>$l$N%9%l%C%I$,<+J,$N(B RegEx $B$N%$%s%9%?%s%9$r(B $B;}$C$F$$$k$H$-$N$_%9%l%C%I%;!<%U$G$"$k(B($BJ,3d%9%l%C%I(B)$B!#(B $B$3$l$O!"(BRegEx $B$,@55,I=8=$N%3%s%Q%$%k$H0lCWH=Dj$NN>J}$r07$C$F$$$k$+$i$G$"$k!#(B

$B:G8e$K!"%0%m!<%P%k%m%1!<%k$rJQ99$9$k$H!"%3%s%Q%$%k$5$l$?A4$F$N@55,I=8=$,L58z$K$J$k$N$G!"(B $B$"$k%9%l%C%I$,@55,I=8=$r07$C$F$$$k4V$K(B $BJL$N%9%l%C%I$,(B set_locale $B$r8F$S=P$9$H!"(B $BM=4|$G$-$J$$7k2L$r@8$`(B $B$@$m$&(B $B$H$$$&$3$H$KCm0U$;$h!#(B

$B$^$?!"(B main() $B$N3+;O$h$jA0$K$O$?$@$R$H$D$N%9%l%C%I$@$1$,B8:_$9$k!"(B $B$H$$$&$3$H$,MW5a$5$l$F$$$k!#(B


Appendix 3: Localization

 Regex++ $B$O

$B%U%m%s%H%(%s%I$NCO0h2=$O%f!<%6$,8+$k$b$N$9$Y$F$r07$&!#(B $B$D$^$j!"%(%i!<%a%C%;!<%8$d!"@55,I=8=9=J8$=$N$b$N$G$"$k!#(B $BNc$($P!"%U%i%s%98l$N%"%W%j%1!<%7%g%s$O(B [[:word:]] $B$r(B [[:mot:]] $B$K!"(B $B$=$7$F(B \w $B$r(B \m $B$KJQ99$9$k$3$H$,=PMh$k$@$m$&!#(B $B%U%m%s%H%(%s%I$N%m%1!<%k$rJQ99$9$k$3$H$O!"(B $B3+H/

$B%P%C%/%(%s%I$NCO0h2=$O@55,I=8=$,2r@O$5$l$?8e$K5/$3$kA4$F$N$3$H$r07$&!#(B $B$D$^$j!"%f!<%6$,8+$J$$!"0?$$$OD>@\4X$o$i$J$$$3$HA4$F$G$"$k!#(B $B$3$l$O!"BgJ8;z>.J8;z$NJQ49$d!">H9g=g=x!"J8;z%/%i%9$NMWAG$J$I$r$"$D$+$&!#(B $B%P%C%/%(%s%I$N%m%1!<%k$O3+H/pJs$r(B $B!"%*%Z%l!<%F%#%s%0%7%9%F%`$d%i%s%?%$%`%i%$%V%i%j$+$iF@$i$l$k$H$$$&$3$H$G$"$k!#(B $B$3$l$O!"$b$7%W%m%0%i%`$N%f!<%6$,@55,I=8=$rD>@\07$($J$$!"(B $BNc$($P@55,I=8=$,$"$J$?$N(B C++ $B%3!<%I$KKd$a9~$^$l$F$$$k$h$&$J>l9g$K!"(B $BL@<(E*$JCO0h2=$,I,MW$G$J$$$H$$$&$3$H$r0UL#$9$k!#(B $B$J$<$J$i%i%$%V%i%j$,!"$"$J$?$N$?$a$KA4$F$r$d$C$F$/$l$k$+$i$G$"$k!#(B $BNc$($P!"@55,I=8=(B [[:word:]]+ $B$r$"$J$?$N%3!<%I$KKd$a9~$`$H!">o$KA4$F$NC18l$K0lCW$9$k!#(B $B$b$7%W%m%0%i%`$,!"2>$K%.%j%7%c8l$N%m%1!<%k4D6-$GAv$C$F$$$?$H$7$F$b!"(B $BA4$F$NC18l$K0lCW$9$k$N$G$"$k!#(B $B$7$+$7!"$=$N0lCW$O%i%F%sJ8;z$G$N0lCW$G$O$J$/!"%.%j%7%cJ8;z$G$N0lCW$G$"$k!#(B $B%P%C%/%(%s%I$N%m%1!<%k$O(B LC_TYPE $B$H(B LC_COLLATE $B$N%+%F%4%j$K1F6A$r

regex++ $B$,%5%]!<%H$9$k(B3$B$D$N0[$J$kCO0h2=5!9=$,$"$k(B:

Win32 localization model.

$B$3$l$O%i%$%V%i%j$,(B Win32 $B4D6-$G%3%s%Q%$%k$5$l$?$H$-$N%G%U%)%k%H$N%b%G%k$G$"$k!#(B $B$=$7$F!"(Bw32_regex_traits $B$K$h$C$F%+%W%;%k2=$5$l$F$$$k!#(B $B$3$N%b%G%k$,E,MQ$5$l$F$$$k$H$-$O!"%f!<%6$N%3%s%H%m!<%k%Q%M%k$K=>$C$?M#0l$N(B $B%0%m!<%P%k%m%1!<%k$,$"$j!"$=$l$O(B GetUserDefaultLCID $B$GJV$5$l$k!#(B regex++ $B$G;H$o$l$kA4$F$N@_Dj$O(B C $B%i%s%?%$%`%i%$%V%i%j$rDL$5$:!"(B $B%*%Z%l!<%F%#%s%0%7%9%F%`$+$iD>@\F@$i$l$k!#(B $B%U%m%s%H%(%s%I$NCO0h2=$O!"%f!<%6Dj5A$NJ8;zNs$r$b$C$?J8;zNs%F!<%V%k$r4^$`%j%=!<%9$G$"$k(B dll $B$rMW5a$9$k!#(B $BFC@-%/%i%9$O

static std::string set_message_catalogue(const std::string& s);

$B$3$l$O!"%3!<%I$,2?$i$+$N@55,I=8=$r%3%s%Q%$%k$9$k(B $BA0$K(B ($B$7$+$7!"I,$:$7$b(B reg_expression $B$N%$%s%9%?%s%9$r9=C[$9$kA0$K$G$O$J$$(B)$B!"(B $B%j%=!<%9$N(B dll $B$NL>A0$r<1JL$9$kJ8;zNs$rH<$C$F8F$S=P$5$l$kI,MW$,$"$k(B:

boost::w32_regex_traits<char>::set_message_catalogue("mydll.dll");

$B$3$N(B API $B$,(B w32_regex_traits $B$N%J%m%&J8;z$H%o%$%IJ8;z(B $BN>J}(B $B$NFCA0$r@_Dj$9$k$3$H$KCm0U$9$k$3$H!#(B

$B$3$N%b%G%k$O8=:_$O!"(B(Windows NT $B$G$N(B SetThreadLocale $B$K$h$k(B) $B%9%l%C%I$KFC2=$7$?%m%1!<%k$r%5%]!<%H$7$F$$$J$$!#(B $B%i%$%V%i%j$O(B NT $B$G$N40A4$J%f%K%3!<%I$N%5%]!<%H$rDs6!$9$k!#(B Windows 9x $B$G$O$3$NG=NO$OB?>/Mn$A$k(B - 0 $B$+$i(B 255 $B$NJ8;z$O%5%]!<%H$5$l$F$$$k$,!"$=$l0J30$O(B "$BL$CN$N(B" $B%0%i%UJ8;z$H$7$F07$o$l$k!#(B

C $BCO0h2=%b%G%k(B

$B%i%$%V%i%j$,(B Win32 $B0J30$N%*%Z%l!<%F%#%s%0%7%9%F%`$G%3%s%Q%$%k$5$l$?$H$-!"(B $B$3$l$,%G%U%)%k%H$N%b%G%k$H$J$k!#$3$l$OFC@-%/%i%9(B c_regex_traits $B$K$h$C$F%+%W%;%k2=$5$l$F$$$k!#(B Win32 $B$N%f!<%6$O%W%j%W%m%;%C%5$G(B BOOST_REGEX_USE_C_LOCALE $B$rDj5A$9$k$3$H$G!"(B $B$3$N%b%G%k$rM-8z$K$9$k$3$H$,=PMh$k!#(B $B$3$N%b%G%k$,M-8z$J$H$-!"(Bsetlocale $B$K$h$j@_Dj$5$l$?M#0l$N%0%m!<%P%k%m%1!<%k$,B8:_$9$k!#(B $BA4$F$N@_Dj$O%i%s%?%$%`%i%$%V%i%j$+$iF@$k$3$H$,=PMh$k$N$G!"(B $B7k2LE*$K%f%K%3!<%I$N%5%]!<%H$O%i%s%?%$%`%i%$%V%i%j$N

static std::string set_message_catalogue(const std::string& s);

$B$3$l$O!"%3!<%I$,2?$i$+$N@55,I=8=$r%3%s%Q%$%k$9$k(B $BA0$K(B ($B$7$+$7!"I,$:$7$b(B reg_expression $B$N%$%s%9%?%s%9$r9=C[$9$kA0$K$G$O$J$$(B)$B!"(B $B%j%=!<%9$N(B dll $B$NL>A0$r<1JL$9$kJ8;zNs$rH<$C$F8F$S=P$5$l$kI,MW$,$"$k(B:

boost::c_regex_traits<char>::set_message_catalogue("mycatalogue");

$B$3$N(B API $B$,(B w32_regex_traits $B$N%J%m%&J8;z$H%o%$%IJ8;z(B $BN>J}(B $B$NFCA0$r@_Dj$9$k$3$H$KCm0U$9$k$3$H!#(B $B$b$7%i%s%?%$%`%i%$%V%i%j$,(B POSIX $B%a%C%;!<%8%+%?%m%0$r%5%]!<%H$7$F$$$J$1$l$P!"(B <nl_types.h> $B$NFH<+$N

setlocale $B$r8F$S=P$9$H!"%3%s%Q%$%k$5$l$?A4$F$N@55,I=8=$,L58z$K$J$k$3$H$KCm0U$9$k$3$H!#(B setlocale(LC_ALL, "C") $B$r8F$S=P$9$H!"(B $B%i%$%V%i%j$O!"$3$N%i%$%V%i%j$N%P!<%8%g%s(B 1 $B$r4^$`B?$/$NEAE}E*$J@55,I=8=%i%$%V%i%j$H(B $BF1$8?6$kIq$$$r$9$k!#(B

C++ localization model.

C++ $BCO0h2=(B $B%b%G%k(B.

$B$3$N%b%G%k$O!"%W%j%W%m%;%C%5%7%s%\%k(B BOOST_REGEX_USE_CPP_LOCALE $B$rDj5A$7$F%i%$%V%i%j$r%S%k%I$7$?;~$N$_M-8z$G$"$k!#(B $B$3$N%b%G%k$,M-8z$J$H$-!"(B reg_expression<> $B$N$=$l$>$l$N%$%s%9%?%s%9$O!"(B $B<+J,<+?H$N(B std::locale $B$N%$%s%9%?%s%9$r;}$D!#(B $B%/%i%9(B reg_expression<> $B$O%a%s%P4X?t(B imbue $B$b;}$D!#(B $B$3$l$O!"@55,I=8=$N%m%1!<%k$r%$%s%9%?%s%9$4$H$K@_Dj$9$k$3$H$r2DG=$K$9$k!#(B $B%U%m%s%H%(%s%I$NCO0h2=$O(B POSIX $B%a%C%;!<%8%+%?%m%0$rI,MW$H$9$k!#(B $B$3$l$O@55,I=8=$N%m%1!<%k$N(B std::message $B%U%!%;%C%H$K$h$C$FFI$_9~$^$l$k!#(B $BFC@-%/%i%9$O0J2<$N%7%s%\%k$r(B export $B$9$k(B:

static std::string set_message_catalogue(const std::string& s);

$B$3$l$O!"%3!<%I$,2?$i$+$N@55,I=8=$r%3%s%Q%$%k$9$k(B $BA0$K(B ($B$7$+$7!"I,$:$7$b(B reg_expression $B$N%$%s%9%?%s%9$r9=C[$9$kA0$K$G$O$J$$(B)$B!"(B $B%a%C%;!<%8%+%?%m%0$NL>A0$r<1JL$9$kJ8;zNs$rH<$C$F8F$S=P$5$l$kI,MW$,$"$k(B:

boost::cpp_regex_traits<char>::set_message_catalogue("mycatalogue");

reg_expression<>::imbue $B$N8F$S=P$7$O!"$=$N(B reg_expression<> $B$N%$%s%9%?%s%9$N8=:_%3%s%Q%$%k$5$l$?@55,I=8=$rL58z$K$9$k$3$H$KCm0U$9$k$3$H!#(B $B$3$N%b%G%k$O(B C++ $BI8=`%i%$%V%i%j$N;WA[$K$b$C$H$b6a$$$b$N$G$"$k!#(B $B$7$+$7!":G$bCY$$%3!<%I$r@8@.$9$k%b%G%k$G$b$"$k!#(B $B$=$7$F8=:_$NI8=`%i%$%V%i%j$N

$B:G8e$K!"$b$7%i%$%V%i%j$r%G%U%)%k%H0J30$NCO0h2=%b%G%k$G%S%k%I$9$k$J$i!"(B $B%5%]!<%H%i%$%V%i%j$r%S%k%I$9$k$H$-$K$b!"%3!<%I$K(B <boost/regex.hpp> $B$d(B <boost/cregex.hpp> $B$r%$%s%/%k!<%I$9$k$H$-$K$b!"(B $BE,@Z$J%W%j%W%m%;%C%5%7%s%\%k(B (BOOST_REGEX_USE_C_LOCALE $B$d(B BOOST_REGEX_USE_CPP_LOCALE) $B$rDj5A$7$J$1$l$P$J$i$J$$$3$H$KCm0U$9$k$3$H!#(B $B$3$l$r3N

$B%a%C%;!<%8%+%?%m%0$NDs6!(B:

$B%i%$%V%i%j$N%U%m%s%H%(%s%I$rCO0h2=$9$k$?$a$K$O!"(B $B%j%=!<%9(B dll $B$NJ8;zNs%F!<%V%k(B (Win32 $B%b%G%k(B) $B$+!"(B POSIX $B%a%C%;!<%8%+%?%m%0(B (C $B$^$?$O(B C++ $B%b%G%k(B) $B$r4^$s$@!"(B $B$U$5$o$7$$%a%C%;!<%8J8;zNs$r$b$C$?%i%$%V%i%j$rDs6!$9$kI,MW$,$"$k!#(B $B8el9g!"(B$B%a%C%;!<%8$O%+%?%m%0$N%a%C%;!<%8=89g%<%m$K8=$l$J$1$l$P$J$i$J$$!#(B $B%a%C%;!<%8$H$=$N(B ID $B$O0J2<$NDL$j(B:
 

  $B%a%C%;!<%8(B ID $B0UL#(B $B4{DjCM(B  
  101 $B;RI=8=$N3+;O$K;H$o$l$kJ8;z(B "("  
  102 $B;RI=8=$N=*N;$K;H$o$l$kJ8;z(B ")"  
  103 $B9TKv$NL@<($rI=$9J8;z(B "$"  
  104 $B9TF,$NL@<($rI=$9J8;z(B "^"  
  105 "$B$"$i$f$kJ8;z$K0lCW$9$kI=8=(B" $B$rI=$9J8;z(B "."  
  106 0$B2s0J>e$N0lCW7+$jJV$71i;;;R(B "*"  
  107 1$B2s0J>e$N0lCW7+$jJV$71i;;;R(B "+"  
  108 0$B$^$?$O(B1$B2s$N0lCW7+$jJV$71i;;;R(B "?"  
  109 $BJ8;z=89g$N3+;O(B "["  
  110 $BJ8;z=89g$N=*N;(B "]"  
  111 $BGSB>1i;;;R(B "|"  
  112 $B%(%9%1!<%WJ8;z(B "\\"  
  113 $B%O%C%7%eJ8;z(B ($B:#$O;H$o$l$F$$$J$$(B) "#"  
  114 $BJ8;zHO0O1i;;;R(B "-"  
  115 $B7+$jJV$71i;;;R$N3+;O(B "{"  
  116 $B7+$jJV$71i;;;R$N=*N;(B "}"  
  117 $B?t;z(B "0123456789"  
  118 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-!"C18l$N6-3&$NL@<($rI=$9J8;z(B "b"  
  119 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-!"HsC18l$N6-3&$NL@<($rI=$9J8;z(B "B"  
  120 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$KC18l$N3+;O$rI=$9J8;z(B "<"  
  121 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$KC18l$N=*N;$rI=$9J8;z(B ">"  
  122 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"$"$i$f$kC18l9=@.J8;z$rI=$9J8;z(B "w"  
  123 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"$"$i$f$kHs(B-$BC18l9=@.J8;z$rI=$9J8;z(B "W"  
  124 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"%P%C%U%!$N@hF,$NL@<($rI=$9J8;z(B "`A"  
  125 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"%P%C%U%!$N=*C<$NL@<($rI=$9J8;z(B "'z"  
  126 $B2~9TJ8;z(B "\n"  
  127 $B%3%s%^%;%Q%l!<%?(B ","  
  128 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"%Y%kJ8;z$rI=$9J8;z(B "a"  
  129 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"%U%)!<%`%U%#!<%IJ8;z(B(FF)$B$rI=$9J8;z(B "f"  
  130 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"2~9TJ8;z$rI=$9J8;z(B "n"  
  131 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"I|5"2~9T(B (CR) $BJ8;z$rI=$9J8;z(B "r"  
  132 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K%?%VJ8;z$rI=$9J8;z(B "t"  
  133 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"?bD>%?%VJ8;z$rI=$9J8;z(B "v"  
  134 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B16$B?JDj?t$N3+;O$rI=$9J8;z(B "x"  
  135 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B ASCII $B%(%9%1!<%WJ8;z$N3+;O$rI=$9J8;z(B "c"  
  136 $B%3%m%s(B ":"  
  137 $B%$%3!<%k(B "="  
  138 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B ASCII $B%(%9%1!<%WJ8;z$rI=$9J8;z(B "e"  
  139 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"$"$i$f$k>.J8;z$rI=$9J8;z(B "l"  
  140 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B$"$i$f$kHs(B-$B>.J8;z$rI=$9J8;z(B "L"  
  141 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B$"$i$f$kBgJ8;z$rI=$9J8;z(B "u"  
  142 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B$"$i$f$kHs(B-$BBgJ8;z$rI=$9J8;z(B "U"  
  143 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B$"$i$f$k6uGrJ8;z$rI=$9J8;z(B "s"  
  144 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B$"$i$f$kHs(B-$B6uGrJ8;z$rI=$9J8;z(B "S"  
  145 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B$"$i$f$k?t;z$rI=$9J8;z!#(B "d"  
  146 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B$"$i$f$kHs(B-$B?t;z$rI=$9J8;z(B "D"  
  147 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B=*N;0zMQId$rI=$9J8;z(B "E"  
  148 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B3+;O0zMQId$rI=$9J8;z(B "Q"  
  149 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B%f%K%3!<%IJ#9gJ8;z%7!<%1%s%9$rI=$9J8;z(B "X"  
  150 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B$"$i$f$kC10lJ8;z$rI=$9J8;z(B "C"  
  151 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $B%P%C%U%!=*N;1i;;;R$rI=$9J8;z(B "Z"  
  152 $B%(%9%1!<%WJ8;z$KB3$$$?$H$-$K!"(B $BO"B3$NL@<($rI=$9J8;z(B "G"  
  153 (? $B$KB3$$$?$H$-$K%<%mI}$NH]DjA0J}0lCW$NL@<($rI=$9J8;z(B !  


 

$B%+%9%?%`$N%(%i!<%a%C%;!<%8$O0J2<$N$h$&$KFI$_9~$^$l$k(B:
 

  $B%a%C%;!<%8(B ID $B%(%i!<%a%C%;!<%8(B ID $B4{DjJ8;zNs(B  
  201 REG_NOMATCH "No match"  
  202 REG_BADPAT "Invalid regular expression"  
  203 REG_ECOLLATE "Invalid collation character"  
  204 REG_ECTYPE "Invalid character class name"  
  205 REG_EESCAPE "Trailing backslash"  
  206 REG_ESUBREG "Invalid back reference"  
  207 REG_EBRACK "Unmatched [ or [^"  
  208 REG_EPAREN "Unmatched ( or \\("  
  209 REG_EBRACE "Unmatched \\{"  
  210 REG_BADBR "Invalid content of \\{\\}"  
  211 REG_ERANGE "Invalid range end"  
  212 REG_ESPACE "Memory exhausted"  
  213 REG_BADRPT "Invalid preceding regular expression"  
  214 REG_EEND "Premature end of regular expression"  
  215 REG_ESIZE "Regular expression too big"  
  216 REG_ERPAREN "Unmatched ) or \\)"  
  217 REG_EMPTY "Empty expression"  
  218 REG_E_UNKNOWN "Unknown error"  


 

$B%+%9%?%`$NJ8;z%/%i%9L>$O  

  $B%a%C%;!<%8(B ID $B2r@b(B $BEy2A$J4{Dj$N%/%i%9L>(B  
  300 $B1Q?t;z$NJ8;z%/%i%9L>(B "alnum"  
  301 $B%"%k%U%!%Y%C%HJ8;z$NJ8;z%/%i%9L>(B "alpha"  
  302 $B%3%s%H%m!<%kJ8;z$NJ8;z%/%i%9L>(B "cntrl"  
  303 $B?t;z$NJ8;z%/%i%9L>(B "digit"  
  304 $B6uGr0J30$N0u;z2DG=J8;z$NJ8;z%/%i%9L>(B "graph"  
  305 $B>.J8;z$NJ8;z%/%i%9L>(B "lower"  
  306 $B0u;z2DG=J8;z$NJ8;z%/%i%9L>(B "print"  
  307 $B6gFIE@$NJ8;z%/%i%9L>(B "punct"  
  308 $B6uGrJ8;z$NJ8;z%/%i%9L>(B "space"  
  309 $BBgJ8;z$NJ8;z%/%i%9L>(B "upper"  
  310 16$B?JJ8;z$NJ8;z%/%i%9L>(B "xdigit"  
  311 $B%V%i%s%/J8;z$NJ8;z%/%i%9L>(B "blank"  
  312 $BC18l9=@.J8;z$NJ8;z%/%i%9L>(B "word"  
  313 $B%f%K%3!<%IJ8;z$NJ8;z%/%i%9L>(B "unicode"  


 

$B:G8e$K!"%+%9%?%`$N>H9gMWAGL>$,%a%C%;!<%8(B ID 400 $B$+$i;O$^$C$FFI$_9~$^$l!"(B $B:G=i$NFI$_9~$_$,$=$N8e<:GT$7$?$H$-$K=*N;$9$k!#(B $B$=$l$>$l$N%a%C%;!<%8$Otagname $B$O(B [[.tagname.]] $B$NFbB&$G;H$o$l$kL>A0$G$"$j!"(B string $B$O>H9gMWAG$NH9gMWAG$NCM(B [[.zero.]] $B$OJ8;zNs$+$i?t;z$X$NJQ49$N$?$a$K;H$o$l$F$$$k$3$H$KCm0U$;$h!#(B $B$b$7$3$l$rB>$NCM$G=q$-49$($?$i!"$=$l$,J8;zNs2r@O$K;H$o$l$k$3$H$K$J$k!#(B $BNc$($P!"%i%F%s?t;z$NBe$o$j$K!"%f%K%3!<%I$N%"%i%S%"(B-$B%$%s%I?t;z$r@55,I=8=$NCf$G;H$$$?$1$l$P!"(B [[.zero.]] $B$K%f%K%3!<%IJ8;z(B 0x0660 $B$r;H$($P$h$$!#(B

POSIX $B$,Dj5A$7$?J8;z%/%i%9L>$H>H9gMWAG$O>o$KMxMQ2DG=$G$"$k$3$H$KCm0U$;$h!#(B $B$?$H$(%+%9%?%`$NL>A0$,Dj5A$5$l$F$b!"5U$K%+%9%?%`$N%(%i!<%a%C%;!<%8$H(B $B%+%9%?%`$N9=J8%a%C%;!<%8$O%G%U%)%k%H$N$b$N$GCV$-49$($i$l$k!#(B


Appendix 4: $B1~MQNc(B

$B$3$N%i%$%V%i%j$K4X$9$k(B3$B$D$N%G%b%"%W%j%1!<%7%g%s$,$"$k!#(B Borland, Microsoft, gcc $B%3%s%Q%$%i$N%a%$%/%U%!%$%k$OIUB0$7$F$$$k$,!"(B $B$=$l0J30$O<+J,$G%a%$%/%U%!%$%k$r:n@.$7$J$1$l$P$J$i$J$$(B

regress.exe:

$B0lCWH=Dj!"8!:w%"%k%4%j%:%`$r40A4$K;n$9$?$a$N!"B`9T%F%9%H%"%W%j%1!<%7%g%s$G$"$k!#(B $B$3$N%W%m%0%i%`$,F0$1$P!">/$J$/$H$b$3$l$i$N;n$5$l$?$b$N$,4X$o$k8B$j$O!"(B $B%i%$%V%i%j$,MW5aDL$j$KF0$/$G$"$m$&$3$H$rJ]>Z$9$k!#(B $B$b$7C/$+$,!"2?$+;n$5$l$F$$$J$$$b$N$r8+$D$1$?$i!"$=$l$K$D$$$FJ9$1$k$H;d$O$&$l$7$$!#(B

Files: parse.cpp, regress.cpp, tests.cpp.

jgrep.exe

$BC1=c$J(B grep $B$N$N(B STL $B%"%k%4%j%:%`$G;H$&$3$H$,=PMh$k(B "$B8-$$(B" $BAPJ}8~%$%F%l!<%?$NNc$r8+$k$K$O!"(B fileiter.cpp/fileiter.hpp $B$*$h$S$=$N%^%C%W%U%!%$%k%/%i%9$r;29M$K$;$h!#(B

Files: jgrep.cpp, main.cpp.

timer.exe

$BC1=c$JBPOC<00lCWH=Dj%"%W%j%1!<%7%g%s!#(B $BA4$F$N0lCW$N7k2L$,;~4VB,Dj$5$l$k$N$G!"(B $B%W%m%0%i%^$O%Q%U%)!<%^%s%9$,=EMW$J$H$-$K!"(B $B@55,I=8=$r:GE,2=$9$k$3$H$,=PMh$k!#(B

Files: regex_timer.cpp.

$BCGJRE*$JNc$O$3$N%I%-%e%a%s%H$G;H$o$l$?%3!<%I$NNc$r4^$s$G$$$k!#(B

regex_match_example.cpp: ftp $B$K4p$E$/(B regex_match $B$NNc(B

regex_search_example.cpp: regex_search $B$NNc(B: cpp $B%U%!%$%k$N%/%i%9Dj5A$r8!:w$9$k!#(B

regex_grep_example_1.cpp: regex_grep $B$NNc(B: cpp $B%U%!%$%k$N%/%i%9Dj5A$r8!:w$9$k!#(B

regex_merge_example.cpp: regex_merge $B$NNc(B: C++ $B%U%!%$%k$r!"9=J8$,%O%$%i%$%H$5$l$?(B HTML $B$KJQ49$9$k!#(B

regex_grep_example_2.cpp: regex_grep $B$NNc(B 2: $B%0%m!<%P%k%3!<%k%P%C%/4X?t$r;H$C$F!"(Bcpp $B%U%!%$%k$N%/%i%9Dj5A$r8!:w$9$k!#(B

regex_grep_example_3.cpp: regex_grep $B$NNc(B 3: $BB+G{$5$l$?%a%s%P4X?t%3!<%k%P%C%/$r;H$C$F!"(Bcpp $B%U%!%$%k$N%/%i%9Dj5A$r8!:w$9$k!#(B

regex_grep_example_4.cpp: regex_grep $B$NNc(B 4: C++ Builder $B$N%/%m!<%8%c$r%3!<%k%P%C%/$H$7$F;H$C$F!"(Bcpp $B%U%!%$%k$N%/%i%9Dj5A$r8!:w$9$k!#(B

regex_split_example_1.cpp: regex_split $B$NNc(B: $BJ8;zNs$r%H!<%/%s$KJ,3d$9$k!#(B

regex_split_example_2.cpp: regex_split $B$NNc(B: $B%j%s%/$5$l$?(B URL $B$rEG$-=P$9!#(B


Appendix 5: $B%X%C%@%U%!%$%k(B

$B$3$N%i%$%V%i%j$,;H$&(B2$B$D$N


Appendix 6: $B:FG[I[(B

 $B$b$7(B Microsoft $B$+(B Borland C++ $B$r;H$C$F$$$F!"(B dll $BHG$N%i%s%?%$%`%i%$%V%i%j$K%j%s%/$7$F$$$k$J$i!"(B regex++ $B$N(B dll $B$N$R$H$D$N%P!<%8%g%s$K$b%j%s%/$7$F$$$k$@$m$&!#(B $B$3$l$i$N(B dll $B$O:FG[I[2DG=$@$,!"(B "$BI8=`$N(B" $B%P!<%8%g%s$H$$$&$b$N$,B8:_$7$J$$$N$G!"(B $B%f!<%6$N(B PC $B$K%$%s%9%H!<%k$9$k$H$-!"$3$l$i$r!"(BPC $B$N%G%#%l%/%H%j%Q%9$K$G$O$J$/!"(B $B%"%W%j%1!<%7%g%s$N%W%i%$%Y!<%H%G%#%l%/%H%j$KCV$/$Y$-$G$"$k!#(B $B$b$7%9%?%F%#%C%/%P!<%8%g%s$N%i%s%?%$%`%i%$%V%i%j$H%j%s%/$7$F$$$k$J$i!"(B regex++ $B$H$b%j%s%/$7$F$$$F!"(B dll $B$,G[I[$5$l$kI,MW$O$J$$$@$m$&!#(B $B2DG=$J(B regex++ dll $B$H%i%$%V%i%j$NL>A0$O$C$FF3$-=P$5$l$k(B:

"boost_regex_"
+ BOOST_LIB_TOOLSET
+ "_"
+ BOOST_LIB_THREAD_OPT
+ BOOST_LIB_RT_OPT
+ BOOST_LIB_LINK_OPT
+ BOOST_LIB_DEBUG_OPT

$B$3$l$i$O
BOOST_LIB_TOOLSET: $B%3%s%Q%$%i$N%D!<%k%;%C%H$NL>A0(B (vc6, vc7, bcb5 $B$J$I(B)

BOOST_LIB_THREAD_OPT: "s" $B$O%7%s%0%k%9%l%C%I%S%k%I$rI=$9!#(B
"m" $B$O%^%k%A%9%l%C%I%S%k%I$rI=$9!#(B

BOOST_LIB_RT_OPT: "s" $B$O%9%?%F%#%C%/%i%s%?%$%`$r$"$i$o$9!#(B
"d" $B$O%@%$%J%_%C%/%i%s%?%$%`$rI=$9!#(B
BOOST_LIB_LINK_OPT: "s" $B$O%9%?%F%#%C%/%j%s%/$rI=$9!#(B
"i" $B$O%@%$%J%_%C%/%j%s%/$rI=$9!#(B

BOOST_LIB_DEBUG_OPT: $BL$Dj5A$J$i%j%j!<%9%S%k%I$rI=$9!#(B
"d" $B$O%G%P%C%0%S%k%I$rI=$9!#(B
"dd" $B$O?GCG%G%P%C%0%S%k%I$rI=$9!#(B(_STLP_DEBUG)

$BCm0U(B: $B%7%s%\%k(B BOOST_REGEX_NO_LIB $B$r%3%s%Q%$%k;~$KDj5A$9$k$3$H$G!"(B $B%i%$%V%i%j$N<+F0A*Br$rIT2DG=$K$9$k$3$H$,=PMh$k!#(B $B$3$l$O!"%i%s%?%$%`%i%$%V%i%j$N(B dll $B%P!<%8%g%s$r;H$C$F$$$F$b!"(B $B%9%?%F%#%C%/%j%s%/$r$7$?$$$h$&$J$H$-$d!"(B regex++ $B$r%G%P%C%0$9$kI,MW$,$"$k$H$-$KLr$KN)$D!#(B


$B%"%C%W%0%l!<%I$K4X$9$kCm5-(B

$B$3$N%P!<%8%g%s$N(B regex++ $B$O(B boost $B%W%m%8%'%/%H$K0\?"$5$l$?:G=i$N$b$N$G$"$j!"(B $B7k2LE*$K!"(Bboost $B%3!<%G%#%s%0%,%$%I%i%$%s$K=>$&$?$a$K!"(B $BB?$/$NJQ99$,0Y$5$l$?!#(B

$B%X%C%@%U%!%$%k$O(B <header> $B$d(B <header.h> $B$+$i(B <boost/header.hpp> $B$KJQ99$5$l$?!#(B

$B%i%$%V%i%j$NL>A06u4V$O(B "jm" $B$+$i(B "boost" $B$KJQ99$5$l$?!#(B

reg_xxx $B%"%k%4%j%:%`$O(B ($BL>A0IU$1$N0l4S@-$r2~A1$9$k$?$a$K(B) regex_xxx $B$K2~L>$5$l$?!#(B

$B%"%k%4%j%:%`(B query_match $B$O(B regex_match $B$K2~L>$5$l$?!#(B $B$^$?!"@55,I=8=$,F~NOJ8;zNs$NA4BN$K0lCW$9$k$H$-$N$_(B true $B$rJV$9$h$&$K$J$C$?(B ($BF~NO%G!<%?$N8!>Z$r9M$($F$$$k(B)$B!#(B

$B4{B8$N%3!<%I$N%3%s%Q%$%k(B:

$B%G%#%l%/%H%j(B libs/regex/old_include $B$K$O!"$3$N%P!<%8%g%s$N(B regex++ $B$,(B $B0JA0$N%i%$%V%i%j$H$N8_49@-$r;}$D$?$a$N%X%C%@%U%!%$%k72$,4^$^$l$F$$$k!#(B $B$3$N%G%#%l%/%H%j$r%$%s%/%k!<%I%Q%9$KDI2C$9$k$+!"$3$l$i$N%X%C%@%U%!%$%k$r(B boost $B$r%$%s%9%H!<%k$7$?%k!<%H%G%#%l%/%H%j$K%3%T!<$9$l$P$h$$!#(B $B$3$l$i$N%X%C%@%U%!%$%k$NFbMF$O?d>)$5$l$F$$$J$$$7!"(B $B%I%-%e%a%s%H$bDs6!$5$l$F$$$J$$!#(B $B$3$l$i$OK\Ev$K!"$?$@4{B8$N%3!<%I$N$?$a$@$1$KB8:_$7$F$$$k!#(B $B?7$7$$%W%m%8%'%/%H$K$O!"?7$7$$%X%C%@7A<0$r;H$&$3$H!#(B


$B$h$jB?$/$N>pJs(B ($BO"Mm$H

$B:nJohn_Maddock@compuserve.com $B$G2DG=$G$"$k!#(B $B$3$N%i%$%V%i%j$N$?$a$N%[!<%`%Z!<%8$O(B http://ourworld.compuserve.com/homepages/John_Maddock/regexpp.htm $B$K$"$k!#(B $B8x<0$N(B boost $B$N%P!<%8%g%s$O(B www.boost.org/libraries.htm$B$+$iF~

$B;d$O(B Robert Sedgewick $BCx(B "Algorithms in C++" $B$KBgJQ46$B9M$((B$B$5$;$F$/$l$?!"0J>e!#(B $B0J2<$N?M!9$O3'!"M-1W$J%3%a%s%H$d=$@5$r$7$F$/$l$?(B: Dave Abrahams, Mike Allison, Edan Ayal, Jayashree Balasubramanian, Jan BNvlsche, Beman Dawes, Paul Baxter, David Bergman, David Dennerline, Edward Diener, Peter Dimov, Robert Dunn, Fabio Forno, Tobias Gabrielsson, Rob Gillen, Marc Gregoire, Chris Hecker, Nick Hodapp, Jesse Jones, Martin Jost, Boris Krasnovskiy, Jan Hermelink, Max Leung, Wei-hao Lin, Jens Maurer, Richard Peters, Heiko Schmidt, Jason Shirk, Gerald Slacik, Scobie Smith, Mike Smyth, Alexander Sokolovsky, HervNi Poirier, Michael Raykh, Marc Recht, Scott VanCamp, Bruno Voigt, Alexey Voinov, Jerry Waldorf, Rob Ward, Lealon Watts, Thomas Witt and Yuval Yosef. $B;d$O$^$?!"(BHenry Spencer $B$N(B Perl and GNU regular expression libraries $B$K4X$9$k%^%K%e%"%k$K$b46o$K!"$3$l$i$N%i%$%V%i%j!"$=$7$F(B POSIX $BI8=`$H$N8_49@-$rJ]$H$&$H$7$?!#(B $B$7$+$7%3!<%I$O40A4$K;d<+?H$N$b$N$G$"$j!"%P%0$r4^$s$G$$$k(B! $B;d$O!";d$,CN$i$J$$$I$s$J%P%0$bD>$9$3$H$,=PMh$J$$$@$m$&$H!"<+?.$r;}$C$FJ]>Z$G$-$k!#(B $B$@$+$i$b$7!"$"$J$?$,2?$+%3%a%s%H$r$b$C$F$$$?$j!"(B $B%P%0$rH/8+$7$?$j$7$?$i!"$<$R65$($FM_$7$$!#(B

$BLrN)$D>pJs$O99$K!"l=j$GF@$k$3$H$,=PMh$k(B:

$B@55,I=8=$K4X$9$k4JC1$J%A%e!<%H%j%"%k$O(B $B$3$3$G8+$k$3$H$,=PMh$k!#(B

Open Unix Specification $B$O!"@55,I=8=9=J8$d$=$N;EMM(B <regex.h>$B!"(B <nl_types.h> $B$J$I$r4^$`!"LrN)$D;qNA$rB?$/4^$s$G$$$k!#(B

Pattern Matching Pointers $B%5%$%H$O(B "must visit" $B%Q%?!<%s%^%C%A$K6=L#$r;}$D$b$N$J$iC/$b$,K,$M$J$1$l$P$J$i$J$$>pJs;q8;$G$"$k!#(B

Glimpse and Agrep, $B$O$h$j9bB.$JC5:w;~4V$r

Udi Manber $B$H(B Ricardo Baeza-Yates $B$ON>J}$H$b!"4XO"$9$k%&%'%V%5%$%H$+$iMxMQ2DG=$J!"(B $BLrN)$D%Q%?!<%s%^%C%A$NJ8=q$r=8$a$?$b$N$G$"$k!#(B


Copyright Dr John Maddock 1998-2000 all rights reserved.


Japanese Translation Copyright (C) 2003 Kohske Takahashi

$B%*%j%8%J%k$N!"5Z$S$3$NCx:n8"I=<($,A4$F$NJ#@=$NCf$K8=$l$k8B$j!"$3$NJ8=q$N(B $BJ#@=!"MxMQ!"JQ99!"HNGd$=$7$FG[I[$rG'$a$k!#$3$N%I%-%e%a%s%H$O!V$"$k$,$^$^!W(B $B$KDs6!$5$l$F$*$j!"$$$+$J$kL@<(E*!"0EL[E*J]>Z$b9T$o$J$$!#$^$?!"(B $B$$$+$J$kL\E*$KBP$7$F$b!"$=$NMxMQ$,E,$7$F$$$k$3$H$r4XCN$7$J$$!#(B