SADAHIRO Tomoyuki > ShiftJIS-Regexp-1.00 > JAPANESE

Download:
ShiftJIS-Regexp-1.00.tar.gz

Annotate this POD

CPAN RT

Open  0
Report a bug
Source  

–¼Ì ^

ShiftJIS::Regexp - Shift-JIS‚ŏ‘‚©‚ꂽ³‹K•\Œ»

‚±‚ÌPOD‚ɂ‚¢‚Ä ^

‚±‚ÌPOD‚́AShift-JIS‚ŏ‘‚©‚ê‚Ä‚¢‚Ü‚·B

'‚ ' ‚ª HIRAGANA LETTER A ‚ÉŒ©‚¦‚Ü‚·‚© ? ‚Ü‚½A'\' ‚ª REVERSE SOLIDUS ‚ł͂Ȃ­ YEN SIGN ‚ÉŒ©‚¦‚Ü‚·‚© ? ‚³‚à‚È‚¯‚ê‚΃tƒHƒ“ƒg‚𐳂µ‚¢‚à‚Ì‚ÉŒðŠ·‚µ‚½•û‚ª‚æ‚¢‚Å‚µ‚傤B (‚ ‚é‚¢‚Í POD ‚ª•ςȕϊ·‚ð‚³‚ê‚½‚Ì‚©‚à’m‚ê‚Ü‚¹‚ñB)

ŠT—v ^

  use ShiftJIS::Regexp qw(:all);

  match('‚ ‚¨‚P‚Q', '\p{Hiragana}{2}\p{Digit}{2}');
# ‚±‚ê‚ÍŽŸs‚Æ“™‰¿‚Å‚·B
  match('‚ ‚¨‚P‚Q', '\pH{2}\pD{2}');

  match('‚ ‚¢‚¢‚¤‚¤‚¤', '^‚ ‚¢+‚¤{3}$');

  replace($str, 'A', '‚`', 'g');

Ú× ^

‚±‚̃‚ƒWƒ…[ƒ‹‚́A³‹K•\Œ»‚ðShift-JIS‚ŏ‘‚¢‚ÄPerl‚Å—p‚¢‚邽‚ß‚Ì Šô‚‚©‚̊֐”‚ð’ñ‹Ÿ‚µ‚Ü‚·B

‚±‚̃‚ƒWƒ…[ƒ‹‚É‚¨‚¢‚Đ³‚µ‚¢ Shift-JIS •¶Žš‚́A ˆÈ‰º‚̐³‹K•\Œ»‚Ƀ}ƒbƒ`‚·‚é‚à‚̂łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB

    [\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]

ƒ}ƒ‹ƒ`ƒoƒCƒgƒGƒ“ƒR[ƒfƒBƒ“ƒO‚É‚¨‚¯‚éŒëƒ}ƒbƒ`‚ð”ð‚¯‚é‚½‚߁A ‚±‚̃‚ƒWƒ…[ƒ‹‚ł̓}ƒbƒ`ƒ“ƒO‚ª–ˆ‰ñ•¶Žš‹«ŠEã‚ōs‚í‚ê‚邽‚ß‚Ì ³‹K•\Œ»‚ð—^‚¦‚ç‚ꂽƒpƒ^[ƒ“‚É•t‰Á‚µ‚Ä‚¢‚Ü‚·B

perlfaq6 ‚Ì "How can I match strings with multibyte characters?" ‚ðŽQÆB

‚Ü‚½AŒãq‚́uŒëƒ}ƒbƒ`‚ð”ð‚¯‚év‚àŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B

ŠÖ”

re(PATTERN)
re(PATTERN, MODIFIER)

Shift-JIS‚ŏ‘‚©‚ꂽ³‹K•\Œ»‚ðPerl‚Ńp[ƒX‰Â”\‚Ȃ悤‚ɕϊ·‚µ‚ĕԂµ‚Ü‚·B

PATTERN‚ɂ́AShift-JIS‚ŏ‘‚©‚ꂽ³‹K•\Œ»‚ð•¶Žš—ñ‚Æ‚µ‚Ä—^‚¦‚Ü‚·B

MODIFIER‚Æ‚µ‚ẮAˆÈ‰º‚̏CüŽqi•¡”Žw’è‰Âj‚ð•¶Žš—ñ‚Å—^‚¦‚Ü‚·B

     i  ‘å•¶Žš^¬•¶Žš‚ð‹æ•Ê‚µ‚È‚¢ (ASCIIƒAƒ‹ƒtƒ@ƒxƒbƒg)
     I  ‘å•¶Žš^¬•¶Žš‚ð‹æ•Ê‚µ‚È‚¢ (ƒMƒŠƒVƒƒ•¶ŽšAƒLƒŠƒ‹•¶ŽšA‘SŠpƒ‰ƒeƒ“•¶Žš)
     j  •½‰¼–¼‚ƕЉ¼–¼‚ð‹æ•Ê‚µ‚È‚¢i‚µ‚©‚µ”¼Šp•Љ¼–¼‚͍l—¶‚³‚ê‚Ü‚¹‚ñj

     s  •¶Žš—ñ‚ð’Pˆês‚Æ‚µ‚Ĉµ‚¤
     m  •¶Žš—ñ‚𕡐”s‚Æ‚µ‚Ĉµ‚¤
     x  ƒoƒbƒNƒXƒ‰ƒbƒVƒ…‚ÌŒã‚Ü‚½‚Í•¶ŽšƒNƒ‰ƒX‚Ì’†‚ɂȂ¢‹ó”’•¶Žš (‚‚܂è [\x20\n\r\t\f])
        ‚𖳎‹‚·‚éB‚µ‚©‚µƒRƒƒ“ƒg‚Í”Fޝ‚µ‚Ü‚¹‚ñB

     o  ˆê‰ñƒp[ƒX‚µ‚āiƒRƒ“ƒpƒCƒ‹‚ł͂ ‚è‚Ü‚¹‚ñ!) Œ‹‰Ê‚ð“à•”‚ɃLƒƒƒbƒVƒ…‚µ‚Ü‚·B

re('^ƒRƒ“ƒsƒ…[ƒ^[?$')‚́A'ƒRƒ“ƒsƒ…[ƒ^['‚Ü‚½‚Í'ƒRƒ“ƒsƒ…[ƒ^'‚Ƀ}ƒbƒ`‚µ‚Ü‚·B

re('^‚ç‚­‚¾$','j') ‚́A'‚ç‚­‚¾', 'ƒ‰ƒNƒ_', '‚çƒN‚¾', ‚ȂǂɃ}ƒbƒ`‚µ‚Ü‚·B

oCüŽq

     while (<DATA>) {
        print replace($_, '(perl)', '<strong>$1</strong>', 'igo');
     }

     ‚́AŽŸ‚̃R[ƒh‚æ‚è‚àŒø—¦‚ª‚æ‚¢‚Å‚µ‚傤

     while (<DATA>) {
        print replace($_, '(perl)', '<strong>$1</strong>', 'ig');
     }

     ‚È‚º‚È‚çŒãŽÒ‚ł͊֐”‚ªŒÄ‚΂ê‚邽‚тɖˆ‰ñƒpƒ^[ƒ“‚ðƒp[ƒX‚·‚é‚©‚ç‚Å‚·B
match(STRING, PATTERN)
match(STRING, PATTERN, MODIFIER)

‘g‚ݍž‚Ý‚Ì m// ‰‰ŽZŽq‚̂悤‚É“®ì‚µ‚Ü‚·B ‚½‚¾‚µA@list = $string =~ m/PATTERN/g ‚ƈقȂèA ƒLƒƒƒbƒVƒ…‚ÌŠ‡ŒÊ‚ð–Y‚ꂸ‚É•t‚¯‚Ä‚­‚¾‚³‚¢B ЇŒÊ‚ÍŽ©“®“I‚ɂ͕t‚«‚Ü‚¹‚ñB

    $string = "‚ ‚¢‚¤‚¦‚¨";

    @list = match($string, '[‚¢‚¦]', 'g'); # ‚¾‚߁BŒ‹‰Ê‚ɃSƒ~‚ª¬‚¶‚é!
    @list = match($string,'([‚¢‚¦])','g'); # —Ç‚µB

PATTERN‚ɂ̓pƒ^[ƒ“‚ð•¶Žš—ñ‚Æ‚µ‚Ä—^‚¦‚Ü‚·B

MODIFIER‚ɂ͏CüŽq‚ð•¶Žš—ñ‚Æ‚µ‚Ä—^‚¦‚Ü‚·B

     i,I,j,s,m,x,o   re()‚Ìà–¾‚ð‚²——‚­‚¾‚³‚¢B

     g  ƒOƒ[ƒoƒ‹ƒ}ƒbƒ`
     z  ƒpƒ^[ƒ“‚ª‹ó•¶Žš—ñ‚Ƀ}ƒbƒ`‚·‚é‚à‚̂ł ‚邱‚Æ‚ðŠÖ”‚É’m‚点‚éB
        (‚·‚݂܂¹‚ñB‚±‚ê‚ðŽg‚¤‚ׂ«‚©‚Ç‚¤‚©‚ðŽ©“®“I‚ɂ͔»•ʂł«‚Ü‚¹‚ñB)

zCüŽq

ƒpƒ^[ƒ“‚ª‹ó•¶Žš—ñ‚Ƀ}ƒbƒ`‚·‚é‚à‚̂ł ‚éê‡AzCüŽq‚ª‚È‚¢‚Æ ˆÈ‰º‚̂悤‚É‚P‰ñ‚¾‚¯ƒ}ƒbƒ`‚·‚ׂ«‚Æ‚±‚ë‚ð‚Q‰ñƒ}ƒbƒ`‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·B zCüŽq‚́A‚±‚ê‚ð–h‚¬‚Ü‚·B

     replace('ƒAƒCƒEƒCƒCƒG', '(?=ƒC)', '‚ ', 'g');  # ƒA‚ ‚ ƒCƒE‚ ‚ ƒC‚ ‚ ƒCƒG
     replace('ƒAƒCƒEƒCƒCƒG', '(?=ƒC)', '‚ ', 'gz'); # ƒA‚ ƒCƒE‚ ƒC‚ ƒCƒG
replace(STRING or SCALAR REF, PATTERN, REPLACEMENT)
replace(STRING or SCALAR REF, PATTERN, REPLACEMENT, MODIFIER)

‘g‚ݍž‚Ý‚Ì s/// ‰‰ŽZŽq‚̂悤‚É“®ì‚µ‚Ü‚·B

‘æˆê•ϐ”‚Æ‚µ‚ăXƒJƒ‰[‚Ö‚ÌƒŠƒtƒ@ƒŒƒ“ƒX‚ð“n‚·‚ƁAƒXƒJƒ‰[‚ð•ύX‚µ‚Ä ’uŠ·‰ñ”‚ð•Ô‚µ‚Ü‚·B

‘æˆê•ϐ”‚Æ‚µ‚Ä•¶Žš—ñiƒŠƒtƒ@ƒŒƒ“ƒX‚ł͂Ȃ¢j‚ð“n‚·‚ƁA—^‚¦‚ç‚ꂽƒXƒJƒ‰[‚Í •ύX‚¹‚¸A’uŠ·Œã‚Ì•¶Žš—ñ‚ð•Ô‚µ‚Ü‚·B

    my $str = '‹à‚P‚T‚R‚O‚O‚O‚O‰~';
    1 while replace(\$str, '(\pD)(\pD{3})(?!\pD)', '$1C$2');
    print $str; # ‹à‚PC‚T‚R‚OC‚O‚O‚O‰~

MODIFIER‚ɂ͏CüŽq‚ð•¶Žš—ñ‚Æ‚µ‚Ä—^‚¦‚Ü‚·B

     i,I,j,s,m,x,o   re()‚Ìà–¾‚ð‚²——‚­‚¾‚³‚¢B
     g,z             match()‚Ìà–¾‚ð‚²——‚­‚¾‚³‚¢B
jsplit(PATTERN or ARRAY REF of [PATTERN, MODIFIER], STRING)
jsplit(PATTERN or ARRAY REF of [PATTERN, MODIFIER], STRING, LIMIT)

‘g‚ݍž‚Ý‚Ì split() ‰‰ŽZŽq‚̂悤‚É“®ì‚µ‚Ü‚·B

ƒXƒJƒ‰[ƒRƒ“ƒeƒLƒXƒg^ƒ{ƒCƒhƒRƒ“ƒeƒLƒXƒg‚Å“ÁŽê”z—ñ @_ ‚ÉŒ‹‰Ê‚ð“ü‚ê‚邱‚Ƃ͂µ‚Ü‚¹‚ñB ƒXƒJƒ‰[ƒRƒ“ƒeƒLƒXƒg‚ł́AŒ©‚‚©‚Á‚½ƒtƒB[ƒ‹ƒh‚̐”‚ð•Ô‚·‚¾‚¯‚Å‚·B

PATTERN‚ɂ́AShift-JIS‚ŏ‘‚©‚ꂽ³‹K•\Œ»‚ð•¶Žš—ñ‚Æ‚µ‚Ä—^‚¦‚Ü‚·B

    jsplit('^', '‚ ‚¢‚¤^‚¦‚¨ƒ^');

PATTERN ‚É ' ' ‚ð—^‚¦‚Ä‚à“Á•ʂȈӖ¡‚Í‚ ‚è‚Ü‚¹‚ñB ’P‚ɁA‘g‚ݍž‚Ý‚Ì CORE::split / / ‚Æ“¯—l‚ɁAˆêŒÂ‚̃Xƒy[ƒX‚É‚æ‚è•ªŠ„‚·‚邾‚¯‚Å‚·B

‹ó”’—Þ•¶Žši‚±‚̏ꍇA˜aŽšŠÔŠui‘SŠpƒXƒy[ƒXj‚à‹ó”’—Þ•¶Žš‚Ƃ݂Ȃµ‚Ü‚·j‚Å •ªŠ„‚µ‚½‚¢ê‡‚ɂ́APATTERN‚É–¢’è‹`’l‚ð—^‚¦‚é‚©A splitspace() ŠÖ”‚ðŽg‚Á‚Ä‚­‚¾‚³‚¢B

    jsplit(undef, ' @ This  is @ perl.');
    splitspace(' @ This  is @ perl.');
    # ('This', 'is', 'perl.')

ƒpƒ^[ƒ“‚ɏCüŽq‚ð‚‚¯‚½‚¢ê‡‚́A–³–¼”z—ñ [PATTERN, MODIFIER] ‚ð ‘æˆêˆø”‚É—p‚¢‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

    jsplit([ '‚ ', 'jo' ], '01234‚ ‚¢‚¤‚¦‚¨ƒAƒCƒEƒGƒI');

‚ ‚é‚¢‚́A–„‚ߍž‚ݏCüŽqiŒãqj‚ð—p‚¢‚邱‚Æ‚à‚Å‚«‚Ü‚·B

    jsplit('(?jo)‚ ', '01234‚ ‚¢‚¤‚¦‚¨ƒAƒCƒEƒGƒI');

MODIFIER‚ɂ͏CüŽq‚ð•¶Žš—ñ‚Æ‚µ‚Ä—^‚¦‚Ü‚·B

     i,I,j,s,m,x,o   re()‚Ìà–¾‚ð‚²——‚­‚¾‚³‚¢B
splitspace(STRING)
splitspace(STRING, LIMIT)

‘g‚ݍž‚Ý‚Ì split(' ', STRING, LIMIT) ‚̂悤‚É“®ì‚µ‚Ü‚·B ‹ó”’—Þ•¶Žši˜aŽšŠÔŠui‘SŠpƒXƒy[ƒXj‚ðŠÜ‚ށj‚É‚æ‚è •¶Žš—ñ STRING ‚𕪊„‚µAŒ‹‰Ê‚ÌƒŠƒXƒg‚ð•Ô‚µ‚Ü‚·B •¶Žš—ñæ“ª‚̋󔒗ޕ¶Žš‚̓tƒB[ƒ‹ƒh‚ðì‚è‚Ü‚¹‚ñB

’ˆÓ: splitspace(STRING, LIMIT) ‚Í jsplit(undef, STRING, LIMIT) ‚Æ“™‰¿‚Å‚·B

splitchar(STRING)
splitchar(STRING, LIMIT)

‘g‚ݍž‚Ý‚Ì split(//, STRING, LIMIT) ‚̂悤‚É“®ì‚µ‚Ü‚·B •¶Žš—ñ STRING ‚ð•¶Žš‚²‚Æ‚É•ªŠ„‚µ‚½ƒŠƒXƒg‚ð•Ô‚µ‚Ü‚·B

’ˆÓ: splitchar(STRING, LIMIT) ‚Í jsplit('', STRING, LIMIT) ‚Æ“™‰¿‚Å‚·B

Šî–{“I‚Ȑ³‹K•\Œ»

   ³‹K•\Œ»          ˆÓ–¡

   ^               •¶Žš—ñ‚̐擪‚Ƀ}ƒbƒ`‚µ‚Ü‚·B
                   ‚½‚¾‚µ 'm' CüŽq‚ðŽg‚Á‚½ê‡‚́As‚̐擪‚Ƀ}ƒbƒ`‚µ‚Ü‚·B

   $               •¶Žš—ñ––”ö‚©A––”ö‚̉üs•¶Žš \n ‚Ì‘O‚Ƀ}ƒbƒ`‚µ‚Ü‚·B
                   ‚½‚¾‚µ 'm' CüŽq‚ðŽg‚Á‚½ê‡‚́As‚Ì––”ö‚Ƀ}ƒbƒ`‚µ‚Ü‚·B

   .               ‰üs•¶Žš \n ˆÈŠO‚Ì”CˆÓ‚Ìˆê•¶Žš‚Ƀ}ƒbƒ`‚µ‚Ü‚·B
                   ‚½‚¾‚µ 's' CüŽq‚ðŽg‚Á‚½ê‡‚́A\n‚ðŠÜ‚Þ”CˆÓ‚Ìˆê•¶Žš‚Ƀ}ƒbƒ`‚µ‚Ü‚·B

   \A              •¶Žš—ñ‚̐擪‚Ƀ}ƒbƒ`‚µ‚Ü‚·B
   \Z              •¶Žš—ñ––”ö‚©A––”ö‚̉üs•¶Žš \n ‚Ì‘O‚Ƀ}ƒbƒ`‚µ‚Ü‚·B
   \z              •¶Žš—ñ––”ö‚¾‚¯‚Ƀ}ƒbƒ`‚µ‚Ü‚·B('(?!\n)\Z' ‚Æ“¯‚¶)

   \C              ˆêŒÂ‚̃IƒNƒeƒbƒg‚Ƀ}ƒbƒ`‚µ‚Ü‚·B

   \j              ”CˆÓ‚Ìˆê•¶Žš‚Ƀ}ƒbƒ`‚µ‚Ü‚·B
                   ‚‚܂肱‚̃‚ƒWƒ…[ƒ‹‚ÅŒ¾‚¤ [\0-\x{FCFC}] ‚Æ“¯‚¶‚Å‚·B

   \J              ‰üs•¶Žš \n ˆÈŠO‚Ì”CˆÓ‚Ìˆê•¶Žš‚Ƀ}ƒbƒ`‚µ‚Ü‚·B
                   ‚‚܂肱‚̃‚ƒWƒ…[ƒ‹‚ÅŒ¾‚¤ [^\n] ‚Æ“¯‚¶‚Å‚·B

     * \j ‚Æ \J ‚Ƃ́A‚±‚̃‚ƒWƒ…[ƒ‹‚É‚æ‚éŠg’£‚Å‚·B—Ⴆ‚΁A

        match($_, '(\j{5})\z') ‚Í––”ö‚̌ܕ¶Žši\n ‚ðŠÜ‚ށj‚ð•Ô‚µ‚Ü‚·B
        match($_, '(\J{5})\Z') ‚Í––”ö‚̌ܕ¶Žši\n ‚͏œ‚­j‚ð•Ô‚µ‚Ü‚·B

ƒƒ^•¶Žš

   \a              ƒxƒ‹       (BEL)
   \b              Œã‘Þ       (BS) * •¶ŽšƒNƒ‰ƒX‚Ì’†‚¾‚¯ *
   \e              ƒGƒXƒP[ƒv (ESC)
   \f              ‘Ž®‘—‚è   (FF)
   \n              ‰üs       (LF)
   \r              •œ‹A       (CR)
   \t              …•½ƒ^ƒu   (HT)
   \0              ƒiƒ‹•¶Žš   (NUL)

   \ooo            ˆêƒoƒCƒg•¶Žš‚𔪐i”‚ÅŽw’è
   \xhh            ˆêƒoƒCƒg•¶Žš‚ð\˜Zi”‚ÅŽw’è
   \x{hhhh}        “ñƒoƒCƒg•¶Žš‚ð\˜Zi”‚ÅŽw’è
   \c[             §Œä•¶Žš

      —Ⴆ‚Î \012 \123 \x5c \x5C \x{824F} \x{9Fae} \cA \cZ \c^ \c? ‚ȂǁB

’è‹`Ï‚Ý•¶ŽšƒNƒ‰ƒX

   ’ʏí‚ÌŒ`Ž®     È—ªŒ`     POSIXŒ`Ž®         •¶Žš‚¨‚æ‚Ñ•¶Žš‚͈̔͂ɂæ‚é’è‹`

   \d                                          [0-9]
   \D                                          [^0-9]
   \w                                          [0-9A-Z_a-z]
   \W                                          [^0-9A-Z_a-z]
   \s                                          [\t\n\r\f ]
   \S                                          [^\t\n\r\f ]

   \p{Xdigit}     \pX        [[:xdigit:]]      [0-9A-Fa-f]
   \p{Digit}      \pD        [[:digit:]]       [0-9‚O-‚X]
   \p{Upper}      \pU        [[:upper:]]       [A-Z‚`-‚y]
   \p{Lower}      \pL        [[:lower:]]       [a-z‚-‚š]
   \p{Alpha}      \pA        [[:alpha:]]       [A-Za-z‚`-‚y‚-‚š]
   \p{Alnum}      \pQ        [[:alnum:]]       [0-9A-Za-z‚O-‚X‚`-‚y‚-‚š]

   \p{Word}       \pW        [[:word:]]        [_\p{Digit}\p{European}\p{Kana}\p{Kanji}]
   \p{Punct}      \pP        [[:punct:]]       [!-/:-@[-`{-~¡-¥A-IL-Q\-¬¸-¿È-ÎÚ-èð-÷ü„Ÿ-„¾]
   \p{Graph}      \pG        [[:graph:]]       [\p{Word}\p{Punct}]
   \p{Print}      \pT        [[:print:]]       [\x20\x{8140}\p{Graph}]
   \p{Space}      \pS        [[:space:]]       [\x20\x{8140}\x09-\x0D]
   \p{Blank}      \pB        [[:blank:]]       [\x20\x{8140}\t]
   \p{Cntrl}      \pC        [[:cntrl:]]       [\x00-\x1F\x7F]
   \p{ASCII}                 [[:ascii:]]       [\x00-\x7F]

   \p{Roman}      \pR        [[:roman:]]       [\x21-\x7E]
   \p{Hankaku}    \pY        [[:hankaku:]]     [\xA1-\xDF]
   \p{Zenkaku}    \pZ        [[:zenkaku:]]     [\x{8140}-\x{FCFC}]

 ( \p{^Zenkaku}   \p^Z       [[:^zenkaku:]]    [\x00-\x7F\xA1-\xDF] )

   \p{X0201}                 [[:x0201:]]       [\x20-\x7F\xA1-\xDF]
   \p{X0208}                 [[:x0208:]]       [\x{8140}-¬¸-¿È-ÎÚ-èð-÷ü‚O-‚X‚`-‚y‚-‚š‚Ÿ-‚ñƒ@-ƒ–ƒŸ-ƒ¶ƒ¿-ƒÖ„@-„`„p-„‘„Ÿ-„¾ˆŸ-˜r˜Ÿ-ê¤]
   \p{X0211}                 [[:x0211:]]       [\x00-\x1F]
   \p{JIS}        \pJ        [[:jis:]]         [\p{X0201}\p{X0208}\p{X0211}]

   \p{NEC}        \pN        [[:nec:]]         [\x{8740}-\x{875D}\x{875f}-\x{8775}\x{877E}-\x{879c}\x{ed40}-\x{eeec}\x{eeef}-\x{eefc}]
   \p{IBM}        \pI        [[:ibm:]]         [\x{fa40}-\x{fc4b}]
   \p{Vendor}     \pV        [[:vendor:]]      [\p{NEC}\p{IBM}]
   \p{MSWin}      \pM        [[:mswin:]]       [\p{JIS}\p{NEC}\p{IBM}]

   \p{Halfwidth}             [[:halfwidth:]]   [!#$%&()*+,./0-9:;<=>?@A-Z\[\\\]^_`a-z{|}~]
   \p{Fullwidth}  \pF        [[:fullwidth:]]   [I”“•ij–{CD^‚O-‚XFGƒ„H—‚`-‚ymnOQM‚-‚šobpP]

   \p{Latin}                 [[:latin:]]       [A-Za-z]
   \p{FullLatin}             [[:fulllatin:]]   [‚`-‚y‚-‚š]
   \p{Greek}                 [[:greek:]]       [ƒŸ-ƒ¶ƒ¿-ƒÖ]
   \p{Cyrillic}              [[:cyrillic:]]    [„@-„`„p-„‘]
   \p{European}   \pE        [[:european:]]    [A-Za-z‚`-‚y‚-‚šƒŸ-ƒ¶ƒ¿-ƒÖ„@-„`„p-„‘]

   \p{HalfKana}              [[:halfkana:]]    [¦-ß]
   \p{Hiragana}   \pH        [[:hiragana:]]    [‚Ÿ-‚ñJKTU]
   \p{Katakana}   \pK        [[:katakana:]]    [ƒ@-ƒ–[RS]
   \p{FullKana}  [\pH\pK]    [[:fullkana:]]    [‚Ÿ-‚ñƒ@-ƒ–JK[TURS]
   \p{Kana}                  [[:kana:]]        [¦-ß‚Ÿ-‚ñƒ@-ƒ–JK[TURS]
   \p{Kanji0}     \p0        [[:kanji0:]]      [V-Z]
   \p{Kanji1}     \p1        [[:kanji1:]]      [ˆŸ-˜r]
   \p{Kanji2}     \p2        [[:kanji2:]]      [˜Ÿ-ê¤]
   \p{Kanji}    [\p0\p1\p2]  [[:kanji:]]       [V-ZˆŸ-˜r˜Ÿ-ê¤]
   \p{BoxDrawing}            [[:boxdrawing:]]  [„Ÿ-„¾]

•¶ŽšƒNƒ‰ƒX

•¶ŽšƒNƒ‰ƒX‚Ì’†‚ɂ́AƒŠƒeƒ‰ƒ‹•¶ŽšAƒƒ^•¶ŽšA’è‹`Ï‚Ý•¶ŽšƒNƒ‰ƒX‚ð “ü‚ê‚邱‚Æ‚ª‚Å‚«‚Ü‚·B ‚Ü‚½A•¶ŽšƒNƒ‰ƒX’†‚ł́A•¶Žš‚͈̔͂ðŽg‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B •¶Žš‚͈̔͂̒[“_‚́AƒŠƒeƒ‰ƒ‹•¶Žš‚©ƒƒ^•¶Žš‚ÅŽw’肵‚Ü‚·B

Shift-JIS •¶Žš‚̏‡˜‚Í: 0x00 .. 0x7F, 0xA1 .. 0xDF, 0x8140 .. 0x9FFC, 0xE040 .. 0xFCFC.

‚»‚ê‚䂦 [\0-\x{fcfc}] ‚́AShift-JIS ‚Ì”CˆÓ‚Ìˆê•¶Žš‚Ƀ}ƒbƒ`‚µ‚Ü‚·B

•¶ŽšƒNƒ‰ƒX’†‚ł́AShift-JIS•¶Žš‚Æ‚µ‚Ä•s³‚ȃoƒCƒg‚Ü‚½‚̓oƒCƒg—ñ‚ÍŽg‚¦‚Ü‚¹‚ñ (—Ⴆ‚Î re('[\xA0-\xFF]'))BƒGƒ‰[‚ɂȂè‚Ü‚·B

“™‰¿•¶ŽšƒNƒ‰ƒX

ƒo[ƒWƒ‡ƒ“ 0.13 ‚©‚ç POSIX ‚Ì“™‰¿•¶ŽšƒNƒ‰ƒX [=x=] ‚ªƒTƒ|[ƒg‚³‚ê‚Ü‚·B —Ⴆ‚΁A[[=‚ =]] ‚Í [‚Ÿƒ@§‚ ƒA±] ‚ƁA [[=P=]] ‚Í [pP‚‚o] ‚ƁA[[=4=]] ‚Í [4‚S] ‚ƁA‚»‚ꂼ‚ê“™‰¿‚Å‚·B ‚±‚ê‚ç‚́A•¶ŽšƒNƒ‰ƒX‚Ì’†‚Å [[=c=]]A[[=p=][=e=][=r=][=l=]] ‚̂悤‚É‚µ‚Ä Žg‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B

[=x=] ‚Ì’†‚ɂ́A”CˆÓ‚Ì•¶ŽšƒŠƒeƒ‰ƒ‹‚Ü‚½‚̓ƒ^•¶Žš \xhh, \x{hhhh} ‚ð —p‚¢‚邱‚Æ‚ª‚Å‚«‚Ü‚·B“™‰¿•¶ŽšƒNƒ‰ƒX‚É‘®‚·‚é•¶Žš‚Ì‚¤‚¿A‚ǂ̕¶Žš‚ðŽg‚Á‚Ä‚à ‚©‚Ü‚¢‚Ü‚¹‚ñB—Ⴆ‚΁A[=‚ =], [=ƒA=], [=\x{82A0}=], [=\xB1=] ‚Ȃǂ́AŒÝ‚¢‚É“¯‚¶ˆÓ–¡‚ðŽ‚¿‚Ü‚·B

[[=‚©=]] ‚Í '‚©', 'ƒJ', '¶', '‚ª', 'ƒK', '¶Þ', 'ƒ•' ‚Ƀ}ƒbƒ`‚µ‚Ü‚·B('¶Þ' ‚Í“ñ•¶Žš‚Å‚·‚ªAÆ‡—v‘f‚Æ‚µ‚Ă͈ê‚‚ł·B ‘÷‰¹A”¼‘÷‰¹‚ð‚à‚ƒJƒi‚̏ƍ‡—v‘f‚́A ‘÷‰¹A”¼‘÷‰¹‚ð•\‚·“ñ•¶Žš‚Ì”¼Šp•Љ¼–¼‚©‚ç‚È‚é•¶Žš—ñ‚ðŠÜ‚݂܂·B

[[===]] ‚Í EQUALS SIGN ‚© FULLWIDTH EQUALS SIGN ‚ƃ}ƒbƒ`‚µ‚Ü‚·B [[=[=]] ‚Í LEFT SQUARE BRACKET ‚© FULLWIDTH LEFT SQUARE BRACKET ‚ƃ}ƒbƒ`‚µ‚Ü‚·B [[=]=]] ‚Í RIGHT SQUARE BRACKET ‚© FULLWIDTH RIGHT SQUARE BRACKET ‚ƃ}ƒbƒ`‚µ‚Ü‚·B [[=\=]] ‚Í YEN SIGN ‚© FULLWIDTH YEN SIGN ‚ƃ}ƒbƒ`‚µ‚Ü‚·B

³‹K•\Œ»’†‚Ì–„‚ߍž‚݃R[ƒh (Perl 5.005 ˆÈ~)

Šg’£³‹K•\Œ» (?{ ... }) ‚Ü‚½‚Í (??{ ... }) ‚́A “ñƒoƒCƒg•¶Žš‚É“Á‚É’ˆÓ‚𕥂킸‚Ƀp[ƒX‚³‚ê‚Ü‚·B

ƒZƒLƒ…ƒŠƒeƒBã‚Ì——R‚É‚æ‚èA(?{ ... }) ‚¨‚æ‚Ñ (??{ ... }) ‚Í ŠÖ” match() ‚â replace() ‚ÅŽg‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñB

‚±‚ê‚ç‚́Are() ŠÖ”‚É‚æ‚Á‚ÄPerl‚Ƀp[ƒX‰Â”\‚Ȑ³‹K•\Œ»‚ɕϊ·‚µ‚½‚Ì‚¿A ‚ ‚È‚½‚̃R[ƒh‚̃XƒR[ƒv‚Ì’†‚Ő³‹K•\Œ»‚ðƒRƒ“ƒpƒCƒ‹‚µ‚Ä‚­‚¾‚³‚¢B use re 'eval'; ‚̐錾‚ª•K—v‚ɂȂé‚Å‚µ‚傤B

  use ShiftJIS::Regexp qw(:all);

  use re 'eval';

  $::res = 0;
  $_ = 'ƒ|' x 8;

  my $regex = re(q/
       \j*?
       (?{ $cnt = 0 })
       (
         ƒ| (?{ local $cnt = $cnt + 1; })
       )*
       ƒ|ƒ|ƒ|
       (?{ $::res = $cnt })
     /, 'x');

  /$regex/;
  print $::res; # 5

–„‚ߍž‚ݏCüŽq

ƒo[ƒWƒ‡ƒ“ 0.15 ‚©‚ç–„‚ߍž‚ݏCüŽq‚ªŠg’£‚³‚ê‚Ü‚µ‚½B

–„‚ߍž‚ݏCüŽq (?iIjsmxo) ‚́Aƒpƒ^[ƒ“‚̐擪‚É‚ ‚éê‡A ‚Ü‚½‚̓pƒ^[ƒ“‚̐擪‚ª ^, \A, \G ‚Ì‚¢‚¸‚ê‚© ‚Å‚ ‚Á‚Ä–„‚ߍž‚ݏCüŽq‚ª‚»‚Ì’¼Œã‚É‚ ‚éê‡‚ÉŒÀ‚èA –{ƒ‚ƒWƒ…[ƒ‹“ÆŽ©‚̏CüŽq I, j, o ‚ðŠÜ‚Þ‚±‚Æ‚ª‚Å‚«‚Ü‚·B

    e.g. (?sm)pattern  ^(?i)pattern  \G(?j)pattern  \A(?ijo)pattern

Perl 5.005 ˆÈ‘O‚Å‚àAmatch('ƒG', '(?i)ƒg') ‚͐³‚µ‚­‹U‚ƂȂè‚Ü‚·B ‚È‚º‚Ȃ炱‚ê‚Í match('ƒG', 'ƒg', 'i') ‚̂悤‚É“­‚­‚©‚ç‚Å‚·B

’: 'ƒG' ‚Ì‘æ“ñƒoƒCƒg‚Í 'G' ‚Å‚ ‚èA'ƒg' ‚Ì‘æ“ñƒoƒCƒg‚Í 'g' ‚Å‚·B

Œëƒ}ƒbƒ`‚ð”ð‚¯‚é

‚±‚̃‚ƒWƒ…[ƒ‹‚́A ’uŠ·‰‰ŽZŽq‚É‚¨‚¯‚éCüŽq 'e' ‚â while-ß‚É‚æ‚郋[ƒv‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚¹‚ñB

‚±‚ê‚ç‚Ì‹@”\‚ð—˜—p‚·‚é‚ɂ́A’ʏí‚̍\•¶i‚‚܂èA‘g‚ݍž‚݂̉‰ŽZŽq m// ‚â s///‚ðŽg—p‚·‚éj‚ð’Ê‚·•K—v‚ª‚ ‚è‚Ü‚·B

ˆêƒoƒCƒg•¶Žš‚ª“ñƒoƒCƒg•¶Žš‚Ì‘æ“ñƒoƒCƒg‚Ƀ}ƒbƒ`‚µ‚½‚èA “ñƒoƒCƒg•¶Žš‚ª•¶Žš‹«ŠE‚Ì‘O‚ÆŒã‚Ì“ñƒoƒCƒg‚Ƀ}ƒbƒ`‚µ‚½‚è‚Æ‚¢‚Á‚½ Œëƒ}ƒbƒ`‚ð”ð‚¯‚é‚½‚߁A³‹K•\Œ» '\A(\j*?)' ‚Ü‚½‚Í '\G(\j*?)'‚ð —p‚¢‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

‚±‚̏ꍇA'(\j*?)' ‚É $1 ‚ð‘Ήž‚³‚¹A–{—ˆ‚ÌŒã•ûŽQÆ‚́A$2 ‚©‚çŽn‚߂邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B

—á1

    use ShiftJIS::Regexp qw(re);

    $_ = '‚ ‚¢‚¤‚¦‚¨ƒAƒCƒEƒGƒIŠ¿Žš ƒVƒtƒg‚i‚h‚r';
    my $regex = re('\G(?:\j*?)(\pK)');
    # ‚Ü‚½‚Í my $regex = re('\R{padG}(\pK)');

    while (/$regex/go) {
        print "found a katakana: $1\n";
    }

—á2

    use ShiftJIS::Regexp qw(re);
    use ShiftJIS::String qw(strrev); # Shift-JIS”Å‚Ì scalar reverse()

    my $regex = re('\G(\j*?)(\w+)');
    # ‚Ü‚½‚Í my $regex = re('(\R{padG})(\w+)');

    foreach ('s/Perl/Camel/g', '(ƒAƒCƒEƒGƒI)AIUEO-Š¿Žš') {
        (my $str = $_) =~ s/$regex/$1.strrev($2)/geo; # $1. ‚ð•t‚¯‚é
        print "$str\n";
    }

’ˆÓ: ”ñí‚É’·‚¢•¶Žš—ñã‚ÅŒŸõ‚ðs‚¤ê‡A \G(\j*?) ‚Ì‘ã‚í‚è‚É“Á•ʂȐ³‹K•\Œ» \R{padG} ‚ð—p‚¢‚é‚Ù‚¤‚ªˆÀ‘S‚ÆŽv‚í‚ê‚Ü‚·B ‚È‚º‚È‚çA\R{padG} ‚̂ق¤‚ª * Žw’èŽq‚ÌŒJ•Ô‚µ‰ñ”‚ª‘å‚«‚­‚È‚è‚É‚­‚­A ŒJ•Ô‚µ‚̏ãŒÀ‚É’B‚·‚éŠm—¦‚ª’á‚­‚Ȃ邩‚ç‚Å‚·B

’ˆÓŽ–€ ^

‚±‚̃‚ƒWƒ…[ƒ‹‚ł͐³‚µ‚¢ Shift-JIS •¶Žš—ñ‚Ì•¶Žš‚Í ˆÈ‰º‚̐³‹K•\Œ»‚Ƀ}ƒbƒ`‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB

   [\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]

ŠO•”ƒŠƒ\[ƒX‚Ì•¶Žš—ñ‚́A‚»‚ꂪ³‚µ‚¢ Shift-JIS •¶Žš—ñ‚Å‚ ‚邯 •ª‚©‚Á‚Ä‚¢‚éê‡‚ðœ‚¢‚Ä ShiftJIS::String ƒ‚ƒWƒ…[ƒ‹‚̊֐” issjis() ‚ð—p‚¢‚ÄŠm”F‚·‚ׂ«‚Å‚·B

³‚µ‚­‚È‚¢ Shift-JIS •¶Žš—ñ‚ðŽg‚¤‚ƕςȌ‹‰Ê‚ɂȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B i³‚µ‚­‚È‚¢ Shift-JIS •¶Žš—ñ‚ðŽg‚Á‚½ê‡A‚Ç‚ñ‚ÈŒ‹‰Ê‚ɂȂ邩A ‰½‚àŒˆ‚Ü‚Á‚Ä‚¢‚Ü‚¹‚ñ‚̂ŁA‰½‚àŠú‘Ò‚µ‚Ă͂¢‚¯‚Ü‚¹‚ñBj

Shift-JIS ‚Ì“ñƒoƒCƒg•¶Žš‚Ì’†‚ɂ́A‘æ“ñƒoƒCƒg‚ª [\x40-\x7E]A‚·‚Ȃ킿

   @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

‚Å‚ ‚é‚à‚Ì‚ª‚ ‚è‚Ü‚·B

Perl ‚̍\•¶‰ðÍ‚ł́A‚±‚̂悤‚ȃoƒCƒg‚ɂ‚¢‚Ä “Á•ʂȏˆ—‚Í‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ‚̂ŁA–â‘肪”­¶‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·B —Ⴆ‚΁AƒŠƒeƒ‰ƒ‹ "•\" ‚Í’v–½“IƒGƒ‰[‚ðˆø‚«‹N‚±‚µ‚Ü‚·B ‚È‚º‚È‚çA‘æ“ñƒoƒCƒg‚Ì 0x5C ‚ª•‚¶ƒNƒH[ƒg‚ðƒGƒXƒP[ƒv‚·‚é‚©‚ç‚Å‚·B

ŠO•”‚̃tƒ@ƒCƒ‹“™‚©‚ç“ǂݏo‚µ‚½ê‡‚́A‚±‚Ì–â‘è‚Í‹N‚±‚è‚Ü‚¹‚ñ‚ªA ƒXƒNƒŠƒvƒg‚ð Shift-JIS ‚ŏ‘‚­Žž‚ɂ͏\•ª‚È’ˆÓ‚ª•K—v‚Å‚·B

Shift-JIS‚ÌƒŠƒeƒ‰ƒ‹•¶Žš—ñ‚ðì‚邽‚߂ɂ́A ƒVƒ“ƒOƒ‹ƒNƒH[ƒg•—‚̃qƒAƒhƒNi<< ''j‚âA ƒƒ^•¶Žš \xhh ‚ðŽg‚¤‚Ù‚¤‚ª‚æ‚¢‚Å‚µ‚傤B

Shift-JIS ‚Ì‘æ“ñƒoƒCƒg‚ɏo‚Ä—ˆ‚È‚¢ASCII}Œ`•¶Žši[\x21-\x3F]j‚Í ˆÈ‰º‚Ì’Ê‚èB

   !"#$%&'()*+,-./0123456789:;<=>?

ƒNƒH[ƒg•—‰‰ŽZŽq‚̃fƒŠƒ~ƒ^‚Æ‚µ‚ẮA‚±‚ê‚ðŽg‚¤‚Ƃ悢‚©‚à‚µ‚ê‚Ü‚¹‚ñB

Šù’m‚̃oƒO ^

ƒƒ^•¶Žš \U, \L, \Q, \E ‚¨‚æ‚ѕϐ”“WŠJ‚͍l—¶‚³‚ê‚Ä‚¨‚è‚Ü‚¹‚ñB •K—v‚È‚çA"" (or qq//) ‰‰ŽZŽq‚ðŽg‚Á‚Ä‚­‚¾‚³‚¢B

’PŒê‹«ŠE‚ðˆµ‚¤ƒƒ^•¶Žš \b ‚¨‚æ‚Ñ \B ‚͐³‚µ‚­“®ì‚µ‚Ü‚¹‚ñB

CüŽq i, I ‚¨‚æ‚Ñ j ‚́A\p{}, \P{}, POSIX [: :]. (—Ⴆ‚Î \p{IsLower}, [:lower:] ‚È‚Ç) ‚ɂ͍ì—p‚µ‚Ü‚¹‚ñB ‚»‚Ì‚½‚߁Are('\p{Lower}', 'iI') ‚Ì‘ã‚í‚è‚É re('\p{Alpha}') ‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B

Œã“ǂ݌¾–¾ (—Ⴆ‚Î (?<=[A-Z])) ‚ª’¼‘O‚Ì“ñƒoƒCƒg•¶Žš‚Ì‘æ“ñƒoƒCƒg‚É Œë‚Á‚ă}ƒbƒ`‚·‚邱‚Ƃɂ͑Ώˆ‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB —Ⴆ‚΁A match("ƒAƒCƒE", '(?<=[A-Z])(\p{Kana})') ‚Í ('ƒC') ‚ð•Ô‚µ‚Ü‚·‚ªA‚à‚¿‚ë‚ñŒë‚è‚Å‚·B

T‚¦‚߂ȗʎw’èŽq‚ðŠÜ‚Þƒpƒ^[ƒ“ (—Ⴆ‚Î .??‚â\d*?) ‚́A ‹ó•¶Žš—ñ‚ƃ}ƒbƒ`‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªAjsplit() ‚̃pƒ^[ƒ“‚Æ‚µ‚Ä—p‚¢‚½ê‡A ‘g‚ݍž‚Ý‚Ì split() ‚©‚ç—\‘z‚³‚ê‚é“®ì‚ƈقȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B

’˜ŽÒ ^

SADAHIRO Tomoyuki <SADAHIRO@cpan.org> ’åœA ’ms

  Copyright(C) 2001-2007, SADAHIRO Tomoyuki. Japan. All rights reserved.

  This module is free software; you can redistribute it
  and/or modify it under the same terms as Perl itself.

ŠÖ˜Aƒ‚ƒWƒ…[ƒ‹ ^

ShiftJIS::String
ShiftJIS::Collate