æ£è¦è¡¨ç¾ã®è©³ç´°
å°Žå…¥
PCREã«ã‚ˆã‚Šã‚µãƒãƒ¼ãƒˆã•れるæ£è¦è¡¨ç¾ã®æ§‹æ–‡ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚
æ£è¦è¡¨ç¾ã¯ã€Perlã®ãƒ‰ã‚ュメントや他ã®å¤šãã®æ›¸ç±ã«ãŠã„ã¦
豊富ãªä¾‹ã¨å…±ã«èª¬æ˜Žã•れã¦ã„ã¾ã™ã€‚
Jeffrey Friedl ãŒæ›¸ã„㟠O'Reilly 発刊ã®
"Mastering Regular Expressions" ã«ã¯ã€è©³ç´°ãŒç¤ºã•れã¦ã„ã¾ã™ã€‚
ã“ã“ã§ã®èª¬æ˜Žã¯ãƒªãƒ•ァレンスドã‚ュメントã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’
æ„図ã—ã¦ã„ã¾ã™ã€‚
æ£è¦è¡¨ç¾ã¯ãƒ‘ターンã§ã‚ã‚Šã€æ¤œç´¢å¯¾è±¡æ–‡å—列ã«å¯¾ã—ã¦å·¦ã‹ã‚‰å³ã«ãƒžãƒƒãƒãƒ³ã‚°ãŒ
行ã‚れã¾ã™ã€‚
パターンã®ä¸ã®å¤šãã®æ–‡å—ã¯ãれ自体を表ã—ã€æ¤œç´¢å¯¾è±¡ã®å¯¾å¿œã™ã‚‹æ–‡å—ã«
マッãƒã—ã¾ã™ã€‚ç°¡å˜ãªä¾‹ã‚’ã‚ã’ã‚‹ã¨ã€ãƒ‘ターン
The quick brown fox
ã¯ã€æ¤œç´¢å¯¾è±¡æ–‡å—列ã®ãれ自体ã¨åŒã˜éƒ¨åˆ†ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
メタ文å—
æ£è¦è¡¨ç¾ã®å¼·åŠ›ã•ã¯ã€ãƒ‘ターンä¸ã«è¤‡æ•°ã®é¸æŠžè‚¢ã‚„繰り返ã—ã‚’å«ã‚€èƒ½åŠ›
ã«ã‚ˆã‚‹ã‚‚ã®ã§ã™ã€‚ã“れらã¯ã€ãƒ¡ã‚¿-æ–‡
å—を使用ã—ãŸãƒ‘ターンã«ã‚ˆã‚Šã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¾ã™ã€‚
メタ文å—ã¯ãれ自体を表ã—ã¾ã›ã‚“ãŒã€ä»£ã‚りã«ç‰¹æœ‰ã®è§£é‡ˆãŒè¡Œã‚れã¾ã™ã€‚
2種類ã®ãƒ¡ã‚¿æ–‡å—ãŒå˜åœ¨ã—ã¾ã™ã€‚片方ã¯ã€ãƒ–ラケットã®ä¸ä»¥å¤–ã«ã‚るパターン
ã§ä½¿ç”¨å¯èƒ½ãªã‚‚ã®ã§ã€ã‚‚ã†ç‰‡æ–¹ã¯ã€ãƒ–ラケットã®ä¸ã§ä½¿ç”¨å¯èƒ½ãªã‚‚ã®ã§ã™ã€‚
ブラケットã®å¤–ã§ä½¿ç”¨ã•れるメタ文å—ã«ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ãŒã‚りã¾ã™ã€‚
- \
一般的ãªã‚¨ã‚¹ã‚±ãƒ¼ãƒ—æ–‡å—
- ^
検索対象(複数行モードã§ã¯è¡Œ)ã®å§‹ã¾ã‚Šã‚’言明
- $
検索対象(複数行モードã§ã¯è¡Œ)ã®çµ‚ã‚りを言明
- .
(デフォルトã§ã¯)改行を除ãå…¨ã¦ã®æ–‡å—ã«ãƒžãƒƒãƒ
- [
æ–‡å—クラス開始を定義
- ]
æ–‡å—クラスã®çµ‚了
- |
é¸æŠžæžã®é–‹å§‹
- (
サブパターンã®é–‹å§‹
- )
サブパターンã®çµ‚了
- ?
( ã®æ„味を拡張ã™ã‚‹ã¾ãŸã¯ã€0 ã¾ãŸã¯1 回ã®ç¹°ã‚Šè¿”ã—ã¾ãŸã¯ã€ç¹°ã‚Š
è¿”ã—を最å°åŒ–ã™ã‚‹
- *
0以上ã®ç¹°ã‚Šè¿”ã—
- +
1以上ã®ç¹°ã‚Šè¿”ã—
- {
最å°/最大繰り返ã—ã®é–‹å§‹
- }
最å°/最大繰り返ã—ã®çµ‚了
パターンä¸ã§ãƒ–ラケットã®ä¸ã®éƒ¨åˆ†ã¯ã€"æ–‡å—クラス" ã¨å‘¼ã°ã‚Œã¾ã™ã€‚
æ–‡å—クラスã§ä½¿ãˆã‚‹ãƒ¡ã‚¿æ–‡å—ã¯æ¬¡ã®ã‚‚ã®ã ã‘ã§ã™ã€‚
- \
一般的ãªã‚¨ã‚¹ã‚±ãƒ¼ãƒ—æ–‡å—
- ^
最åˆã®æ–‡å—ã«ç”¨ã„ãŸå ´åˆã®ã¿ã€ã‚¯ãƒ©ã‚¹ã‚’å¦å®š
- -
æ–‡å—ã®ç¯„囲を示ã™
- ]
æ–‡å—クラスを終了ã™ã‚‹
次ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã€å„メタ文å—ã®ä½¿ç”¨æ³•ã®èª¬æ˜Žã‚’行ã„ã¾ã™ã€‚
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã«ã¯ã€ã„ãã¤ã‹ã®ä½¿ç”¨æ³•ãŒã‚りã¾ã™ã€‚ã¾ãšã€
英å—ã§ãªã„æ–‡å—ãŒå¾Œã«ç¶šãå ´åˆã€ãã¦?å—ãŒæœ‰ã™ã‚‹
ç‰¹åˆ¥ãªæ„味ã¯å¤±ã‚れã¾ã™ã€‚ã“ã®ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®ä½¿ã„æ–¹ã¯ã€
æ–‡å—クラスã®å†…å´ã¨å¤–å´ã®ä¸¡æ–¹ã§ä½¿ç”¨å¯èƒ½ã§ã™ã€‚
例ãˆã°ã€"*" æ–‡å—ã«ãƒžãƒƒãƒã•ã›ãŸã„å ´åˆã€ãƒ‘ターン㫠"\*" を書ãã¾ã™ã€‚
ã“れã«ã‚ˆã‚Šã€æ¬¡ã®æ–‡å—ãŒãƒ¡ã‚¿æ–‡å—ã¨ã—ã¦è§£é‡ˆã•れよã†ã¨ã•れã¾ã„ã¨ã€
"\" ã‚’ä¼´ã£ãŸè‹±å—ã§ãªã„æ–‡å—ãŒã€ãã®æ–‡å—自体を表ã™ã“ã¨ã‚’ä¿è¨¼ã—ã¾ã™ã€‚
特ã«ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã«ãƒžãƒƒãƒã•ã›ãŸã„å ´åˆã¯ã€"\\" ã¨æ›¸ãã¾ã™ã€‚
パターンãŒã€ PCRE_EXTENDED オプションを付ã‘ã¦ã‚³ãƒ³ãƒ‘イルã•れã¦ã„ã‚‹
å ´åˆã€(æ–‡å—クラスã®ä¸ã§ãªã„)パターン内ã®ç©ºç™½æ–‡å—ãŠã‚ˆã³
"#" ã¨æ¬¡ã®æ”¹è¡Œæ–‡å—ã®é–“ã®æ–‡å—ã¯ç„¡è¦–ã•れã¾ã™ã€‚
空白文å—ã¾ãŸã¯ "#" をパターンã®ä¸€éƒ¨ã¨ã—ã¦å«ã‚ã‚‹éš›ã«ã¯ã€
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã«ã‚ˆã‚Šã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®2番目ã®ä½¿ç”¨æ³•ã¯ã€å‡ºåŠ›ã•れãªã„æ–‡å—ã‚’
パターン内ã«ç›®ã«è¦‹ãˆã‚‹å½¢ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã™ã‚‹æ‰‹æ³•ã‚’æä¾›ã™ã‚‹ã‚‚ã®ã§ã™ã€‚
パターンを終了ã•ã›ã‚‹ãƒŒãƒ«æ–‡å—を除ãã€å‡ºåŠ›ã•れãªã„æ–‡å—ã®è¦‹ãˆæ–¹ã«
ã¯ä½•ã®åˆ¶ç´„ã‚‚ã‚りã¾ã›ã‚“ãŒã€ãƒ‘ターンをテã‚スト編集ã™ã‚‹éš›ã«ã¯ã€é€šå¸¸
次ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—シーケンスを用ã„ã‚‹æ–¹ãŒã€å…ƒã®ãƒã‚¤ãƒŠãƒªæ–‡å—よりも
より簡å˜ã§ã—ょã†ã€‚
- \a
アラームã€ãƒ™ãƒ«æ–‡å— (16進 07)
- \cx
"control-x", ãŸã ã— x ã¯ã‚らゆる文å—
- \e
エスケープ (16進 1B)
- \f
改ページ (16進 0C)
- \n
改行 (16進 0A)
- \r
復帰 (16進 0D)
- \t
タブ (16進 09)
- \xhh
16進数㧠hh ã®æ–‡å—
- \ddd
8進数㧠ddd ã®æ–‡å—ã¾ãŸã¯å¾Œæ–¹å‚ç…§
"\cx" ã®æ£ç¢ºãªåŠ¹æžœã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚"x" ãŒå°æ–‡å—ã®å ´åˆã€
大文å—ã«å¤‰æ›ã•れã¾ã™ã€‚ç¶šã„ã¦ã€æ–‡å—ã®6ビット目(16進数 40)ãŒ
å転ã•れã¾ã™ã€‚ã¤ã¾ã‚Šã€"\cz" ã¯16進数㮠1A ã«ãªã‚Šã¾ã™ãŒã€"\c{"
ã¯16進数㮠3B ã«ãªã‚Šã€"\c;" 㯠16進数㮠7B ã«ãªã‚Šã¾ã™ã€‚
"\x" ã®å¾Œã§ã¯ã€2æ¡ã®16進数ãŒèªã¾ã‚Œã¾ã™ã€‚(è¡¨ã™æ–‡å—ã¯ã€å¤§æ–‡å—ã§ã‚‚
å°æ–‡å—ã§ã‚‚å¯ã§ã™)"\0"ã§ã¯2æ¡ã¾ã§ã®8進数ãŒèªã¿ã“ã¾ã‚Œã¾ã™ã€‚
両方ã®ã‚±ãƒ¼ã‚¹ã¨ã‚‚ã€2æ¡ã‚ˆã‚Šå°‘ãªã„å ´åˆã€è¡¨ã—ã¦ã„ã‚‹æ–‡å—自体ãŒ
使用ã•れã¾ã™ã€‚ã¤ã¾ã‚Šã€"\0\x\07" ã¯2ã¤ã®ãƒŒãƒ«æ–‡å—ã®å¾Œã«ãƒ™ãƒ«æ–‡å—
ãŒç¶šã„ãŸã‚‚ã®ã‚’表ã—ã¾ã™ã€‚8é€²æ•°ã‚’è¡¨ã™æ–‡å—ã«ã¤ã„ã¦ã¯ã€æœ€åˆã®ã‚¼ãƒ
ã®å¾Œã«2æ¡ã®æ•°å—を指定ã™ã‚‹ã‚ˆã†ã«æ³¨æ„ã—ã¦ä¸‹ã•ã„。
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®å¾Œã«0ä»¥å¤–ã®æ•°å—ãŒç¶šãå ´åˆã®å‡¦ç†ã¯ã€è¤‡é›‘ã§ã™ã€‚
æ–‡å—クラスã®å¤–ã§ã¯ã€PCRE ã¯ç¶šãæ¡ã‚’10進数ã¨ã—ã¦èªã¿ã“ã¿ã¾ã™ã€‚
æ•°å—ãŒ10よりもå°ã•ã„å ´åˆã€ã¾ãŸã¯ã€å¼ã®ä¸ã«å€¤ã‚’å–å¾—ã—ãŸå·¦æ‹¬å¼§ãŒ
ã“ã®æ•°ä»¥ä¸Šã‚ã£ãŸå ´åˆã€å…¨ä½“ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã¯ã€å¾Œæ–¹
å‚ç…§ã¨ã—ã¦è§£é‡ˆã•れã¾ã™ã€‚ã“ã®å‹•作ã«é–¢ã™ã‚‹èª¬æ˜Ž
ã¯ã€æ‹¬å¼§ä»˜ãã®ã‚µãƒ–パターンã®èª¬æ˜Žã®å¾Œã«è¡Œã„ã¾ã™ã€‚
æ–‡å—クラスã®ä¸ã¾ãŸã¯10進数ãŒ9より大ããã€å–得を行ã£ãŸã‚µãƒ–パターン
ãŒã“ã®æ•°ã«æº€ãŸãªã„å ´åˆã€PCRE ã¯ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®å¾Œã‹ã‚‰æœ€å¤§3æ–‡å—ã®8進数
ã‚’å†åº¦èªã¿ã“ã¿ã€ãã®å€¤ã®æœ€ä¸‹ä½ 8ビットã‹ã‚‰1ãƒã‚¤ãƒˆã‚’生æˆã—ã¾ã™ã€‚
ç¶šãæ¡ã¯ãれ自体を表ã—ã¾ã™ã€‚例ãˆã°ã€
- \040
ã¯ç©ºç™½ã®åˆ¥ã®è¡¨è¨˜æ³•ã§ã™ã€‚
- \40
ã¯ã€åŒã˜æ„味ã§ã™ã€‚ãŸã ã—ã€å€¤ã‚’å–得済ã¿ã®ã‚µãƒ–パターンãŒ40個未
満ã®å ´åˆã€‚
- \7
ã¯å¸¸ã«å¾Œæ–¹å‚ç…§ã§ã™ã€‚
- \11
ã¯å¾Œæ–¹å‚ç…§ã¾ãŸã¯ã‚¿ãƒ–ã®åˆ¥ã®è¡¨è¨˜æ³•ã§ã™ã€‚
- \011
ã¯å¸¸ã«ã‚¿ãƒ–ã§ã™ã€‚
- \0113
ã¯ã‚¿ãƒ–ã®å¾Œã«æ–‡å— "3" ãŒç¶šã„ãŸã‚‚ã®ã§ã™ã€‚
- \113
(99 ã‚’è¶…ãˆã‚‹å¾Œæ–¹å‚ç…§ã¯ãªã„ã®ã§) 8進数 113 ã‚’è¡¨ã™æ–‡å—。
- \377
ã¯1ビットã®ä¸¦ã³ã§æ§‹æˆã•れる1ãƒã‚¤ãƒˆã§ã™ã€‚
- \81
ã¯å¾Œæ–¹å‚ç…§ã¾ãŸã¯ã€ãƒŒãƒ«æ–‡å—ã®å¾Œã«2ã¤ã®æ–‡å— "8" ãŠã‚ˆã³ "1" ãŒ
ç¶šã„ãŸã‚‚ã®ã§ã™ã€‚
3æ¡ã‚’è¶…ãˆã¦8進数ã¯èªã¿ã“ã¾ã‚Œãªã„ãŸã‚ã€å€¤ãŒ100以上ã®8進数ã«ã¯
ゼãƒã‚’å‰ã«ã¤ã‘ã‚‹ã¹ãã§ã¯ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
1ãƒã‚¤ãƒˆã®å€¤ã‚’定義ã™ã‚‹ã‚らゆるシーケンスã¯ã€æ–‡å—クラスã®å†…部
ãŠã‚ˆã³å¤–部ã§ä½¿ç”¨å¯èƒ½ã§ã™ã€‚åŠ ãˆã¦ã€æ–‡å—クラスã®å†…部ã§ã¯ã‚·ãƒ¼ã‚±ãƒ³ã‚¹
"\b" ã¯ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹(16進 0x)ã¨ã—ã¦è§£é‡ˆã•れã¾ã™ã€‚
æ–‡å—クラスã®å¤–ã§ã¯ã€åˆ¥ã®æ„味を有ã—ã¾ã™ã€‚(以下をå‚照下ã•ã„)
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®ç¬¬3ã®ä½¿ç”¨æ³•ã¯ã€åŒ…æ‹¬çš„ãªæ–‡å—型を指定ã™ã‚‹ç”¨é€”
ã§ã™ã€‚
- \d
10進数å—
- \D
10進数å—ã§ãªã„å…¨ã¦ã®æ–‡å—
- \s
空白文å—
- \S
空白文å—ä»¥å¤–ã®æ–‡å—
- \w
å˜èªžæ§‹æˆæ–‡å—
- \W
å˜èªžæ§‹æˆæ–‡å—以外
エスケープシーケンスã®å„組ã¯ã€å…¨æ–‡å—ã®é›†åˆã‚’2ã¤ã®é›†åˆã«
分割ã—ã¾ã™ã€‚å…¨ã¦ã®æ–‡å—ã¯ã€å„組ã®ã†ã¡ã€ç‰‡æ–¹ã ?kマッãƒã—ã¾ã™ã€‚
å˜èªžæ§‹æˆæ–‡å—ã¨ã¯è‹±å—ã¾ãŸã¯æ•°å—ã¾ãŸã¯ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢æ–‡å—ã§ã‚りã€
Perl ã® "å˜èªž" ã¨æˆã‚Šå¾—ã‚‹æ–‡å—ã®ã“ã¨ã§ã™ã€‚
æ–‡å—ãŠã‚ˆã³æ•°å—ã®å®šç¾©ã¯ã€PCRE ã®æ–‡å—テーブルã«ã‚ˆã‚Šåˆ¶å¾¡ã•れã€
ãƒã‚±ãƒ¼ãƒ«ã‚’指定ã—ãŸãƒžãƒƒãƒã‚’行ã£ãŸå ´åˆã«ã¯å¤‰ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
("ãƒã‚±ãƒ¼ãƒ«ã®ã‚µãƒãƒ¼ãƒˆ"ã‚’å‚照下ã•ã„)
例ãˆã°ã€"fr" (フランス語)ãƒã‚±ãƒ¼ãƒ«ã®å ´åˆã€ã„ãã¤ã‹ã®128ã‚’è¶…ãˆã‚‹
æ–‡å—ã‚³ãƒ¼ãƒ‰ã®æ–‡å—ã¯ã€ã‚¢ã‚¯ã‚»ãƒ³ãƒˆä»˜ãã®æ–‡å—ã«ä½¿ç”¨ã•れã¦ãŠã‚Šã€
ã“れら㯠\w ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
ã“ã‚Œã‚‰ã®æ–‡å—型シーケンスã¯ã€æ–‡å—クラスã®å†…外ã«ã‚ˆã‚‰ãšä½¿ç”¨å¯èƒ½
ã§ã™ã€‚ã“れらã¯ã€é©å½“ãªåž‹ã®1æ–‡å—ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ç¾åœ¨ãƒžãƒƒãƒãƒ³ã‚°
を行ã£ã¦ã„ã‚‹ä½ç½®ãŒæ¤œç´¢å¯¾è±¡æ–‡å—列ã®çµ‚端ã§ã‚ã‚‹å ´åˆã€ãƒžãƒƒãƒã§ãã‚‹
æ–‡å—ã¯ãªã„ã®ã§å…¨ã¦ã®ãƒžãƒƒãƒãƒ³ã‚°ã¯å¤±æ•—ã—ã¾ã™ã€‚
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®ç¬¬4ã®ä½¿ç”¨æ³•ã¯ã€å˜ç´”ãªè¨€æ˜Žã§ã™ã€‚
言明ã¯ã€æ¤œç´¢å¯¾è±¡æ–‡å—列ã‹ã‚‰æ–‡å—ã‚’å…¨ãæŠœã出ã•ãšã«
マッãƒãŒç‰¹å®šã®ä½ç½®ã§ç”Ÿã˜ã‚‹ã¨ã„ã†æ‹˜æŸæ¡ä»¶ã‚’指定ã—ã¾ã™ã€‚
より複雑ãªè¨€æ˜Žã«é–¢ã™ã‚‹ã‚µãƒ–パターンã®ä½¿ç”¨æ³•を以下ã«èª¬æ˜Žã—ã¾ã™ã€‚
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ä»˜ãã®è¨€æ˜Žã¯æ¬¡ã®ã‚‚ã®ãŒã‚りã¾ã™ã€‚
- \b
å˜èªžã®å¢ƒç•Œ
- \B
å˜èªžã®å¢ƒç•Œã§ãªã„
- \A
検索対象ã®å§‹ã¾ã‚Š (複数行モードã¨ã¯ç‹¬ç«‹)
- \Z
検索対象ã®çµ‚ã‚りã¾ãŸã¯çµ‚ç«¯ã®æ”¹è¡Œ (複数行モードã¨ã¯ç‹¬ç«‹)
- \z
検索対象ã®çµ‚ã‚り (複数行モードã¨ã¯ç‹¬ç«‹)
ã“れらã®è¨€æ˜Žã¯ã€æ–‡å—クラスã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。(ã—ã‹ã—ã€æ–‡å—クラスã®
ä¸ã§ã¯ã€"\b" ã«ã¯åˆ¥ã®æ„味ã€ã¤ã¾ã‚Šã€ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼
ス文å—ã¨ã„ã†æ„味ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„)
å˜èªžã®å¢ƒç•Œã¯ã€æ¤œç´¢å¯¾è±¡æ–‡å—列ã«ãŠã„ã¦ã€ç¾åœ¨ã®æ–‡å—ãŠã‚ˆã³å‰ã®æ–‡å—ãŒ
両方ã¯\wã¾ãŸã¯\Wã«ãƒžãƒƒãƒã—
ãªã„(ã™ãªã‚ã¡ã€ç‰‡æ–¹ã¯\wã«ãƒžãƒƒãƒã—ã¦ã€ã‚‚ã†ç‰‡æ–¹
ã¯\Wã«ãƒžãƒƒãƒã™ã‚‹)ã‹ã€ã¾ãŸã¯ã€æœ€åˆã®ã¾ãŸã¯æœ€å¾Œ
ã®æ–‡å—ãŒ\wã«ãƒžãƒƒãƒã™ã‚‹ãªã‚‰ã°ã€ãれãžã‚Œã€æ–‡å—
列ã®å§‹ã‚ã¾ãŸã¯çµ‚ã‚りã®ä½ç½®ã§ã™ã€‚
言明\A, \Z,
\zã¯ã€(以下ã«èª¬æ˜Žã™ã‚‹)ã©ã‚“ãªã‚ªãƒ—ションをè¨å®š
ã—ã¦ã‚‚æ–‡å—列ã®å§‹ç«¯ãŠã‚ˆã³çµ‚端ã«ã®ã¿ãƒžãƒƒãƒã™ã‚‹ãƒãƒƒãƒˆè¨˜å·ãŠã‚ˆã³ãƒ‰ãƒ«
記å·ã¨ã¯ç•°ãªã£ã¦ã„ã¾ã™ã€‚
ã“れらã®è¨€æ˜Žã¯ã€PCRE_NOTBOLã¾ãŸã¯PCRE_NOTEOLオプションã®
影響をå—ã‘ã¾ã›ã‚“。\ZåŠã³\z
ã®é•ã„ã¯ã€\Zã¯ã€æ–‡å—列ã®çµ‚端ã¨åŒæ™‚ã«æ–‡å—列ã®
æœ€å¾Œã®æ–‡å—ãŒæ”¹è¡Œã®å ´åˆã«å‰ã®æ–‡å—ã«ãƒžãƒƒãƒã™ã‚‹ã®ã«å¯¾ã—ã€
\zã¯çµ‚端ã«ã®ã¿ãƒžãƒƒãƒã—ã¾ã™ã€‚
ãƒãƒƒãƒˆè¨˜å·åŠã³ãƒ‰ãƒ«è¨˜å·
æ–‡å—クラスã®å¤–å´ã®å ´åˆã€ãƒ‡ãƒ•ォルトã®ãƒžãƒƒãƒãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ãƒãƒƒãƒˆè¨˜å·ã¯
ç¾åœ¨ãƒžãƒƒãƒãƒ³ã‚°ã‚’行ã£ã¦ã„ã‚‹ä½ç½®ãŒå¯¾è±¡æ–‡å—列ã®å§‹ç«¯ã§ã‚ã‚‹å ´åˆã«ã®ã¿
TRUEã¨ãªã‚‹è¨€æ˜Žã§ã™ã€‚
æ–‡å—クラスã®å†…部ã§ã¯ã€ãƒãƒƒãƒˆè¨˜å·ã¯å…¨ãåˆ¥ã®æ„味ã¨ãªã‚Šã¾ã™ã€‚
(以下をå‚ç…§)
複数ã®é¸æŠžè‚¢ãŒã‚ã‚‹å ´åˆã€
ãƒãƒƒãƒˆè¨˜å·ã¯ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æœ€åˆã®æ–‡å—ã§ã‚ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。
ã—ã‹ã—ã€ãƒ‘ターンãŒãã®æžã«ãƒžãƒƒãƒã—ãªã„å ´åˆã€
å„é¸æŠžè‚¢ã®å…ˆé ã«ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚
å…¨ã¦ã®é¸æŠžè‚¢ãŒãƒãƒƒãƒˆè¨˜å·ã§å§‹ã¾ã‚‹å ´åˆã€ãƒ‘ターンã¯å¯¾è±¡ã®æœ€åˆã«ã®ã¿
マッãƒã™ã‚‹ã‚ˆã†ã«æ‹˜æŸã•れã¦ã„£?å ´åˆã§ã‚りã€"アンカー付ã" パターンã¨
呼ã°ã‚Œã¾ã™ã€‚
(ä»–ã®æ–‡å—もパターンをアンカー付ãã«ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™)
ドル記å·ã¯ã€(デフォルトã§ã¯)ç¾åœ¨ã®ãƒžãƒƒãƒãƒ³ã‚°ç‚¹ãŒå¯¾è±¡æ–‡å—列ã®
終端ã«ã‚ã‚‹ã‹ã€æ–‡å—åˆ—ã®æœ€å¾Œã®æ–‡å—ãŒæ”¹è¡Œæ–‡å—ã§ã‚ã‚‹å ´åˆã«
ãã®ç›´å‰ã«ã‚ã‚‹å ´åˆã®ã¿ TRUE ã¨ãªã‚‹è¨€æ˜Žã§ã™ã€‚
ドル記å·ã¯ã€è¤‡æ•°ã®é¸æŠžè‚¢ãŒã‚ã‚‹å ´åˆã€ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æœ€å¾Œã®æ–‡å—ã§ã‚
ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“ãŒã€ä½¿ç”¨ã•??æžã®æœ€å¾Œã®ã‚¢ã‚¤ãƒ†ãƒ ã§ã‚ã‚‹å¿…è¦
ãŒã‚りã¾ã™ã€‚ドル記å·ã¯ã€æ–‡å—クラスã®ä¸ã§ã¯ç‰¹åˆ¥ãªæ„味を有ã—ã¾
ã›ã‚“。
ドル記å·ã®æ„味ã¯ã€ã‚³ãƒ³ãƒ‘イル時ã¾ãŸã¯ãƒžãƒƒãƒãƒ³ã‚°æ™‚ã®
PCRE_DOLLAR_ENDONLY
オプションã®è¨å®šã«ã‚ˆã‚Šæ–‡å—列ã®çµ‚端ã«ã®ã¿ãƒžãƒƒãƒã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹
ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ã“ã®è¨å®šã¯ã€\Z 言明ã«ã¯å½±éŸ¿ã‚’与ãˆã¾ã›ã‚“。
ãƒãƒƒãƒˆè¨˜å·ã¨ãƒ‰ãƒ«è¨˜å·ã®æ„味ã¯ã€PCRE_MULTILINEオプション
ã‚’è¨å®šã—ãŸå ´åˆã«å¤‰åŒ–ã—ã¾ã™ã€‚ã“れをè¨å®šã—ãŸå ´åˆã€å¯¾è±¡æ–‡å—列ã®å§‹ç«¯
åŠã³çµ‚端ã«ãƒžãƒƒãƒã™ã‚‹ã®ã«åŠ ãˆã¦ã€æ–‡å—列内部㮠"\n" æ–‡å—ã®ç›´å‰
åŠã³ç›´å¾Œã«ãれãžã‚Œãƒžãƒƒãƒã—ã¾ã™ã€‚例ãˆã°ã€ãƒ‘ターン /^abc$/ ã¯
複数行モードã§ã¯å¯¾è±¡æ–‡å—列 "def\nabc" ã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€
ãã†ã§ãªã„å ´åˆã¯ãƒžãƒƒãƒã—ã¾ã›ã‚“ã€‚çµæžœã¨ã—ã¦ã€
å…¨ã¦ã®æžãŒ "^" ã§å§‹ã¾ã‚‹ãŸã‚ã€å˜ä¸€è¡Œãƒ¢ãƒ¼ãƒ‰ã§ã‚¢ãƒ³ã‚«ãƒ¼ä»˜ãã®ãƒ‘ã‚¿
ーンã¯ã€è¤‡æ•°è¡Œãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚¢ãƒ³ã‚«ãƒ¼ç„¡ã—ã¨ãªã‚Šã¾ã™ã€‚
PCRE_DOLLAR_ENDONLY
オプションã¯ã€PCRE_MULTILINEãŒè¨å®šã•れ
ã¦ã„ã‚‹å ´åˆã¯ç„¡è¦–ã•れã¾ã™ã€‚
両方ã®ãƒ¢ãƒ¼ãƒ‰ã§å¯¾è±¡ã®å§‹ç«¯ãŠã‚ˆã³çµ‚端ã«ãƒžãƒƒãƒã•ã›ã‚‹ãŸã‚ã«
シーケンス \A, \Z, \z を使用出æ¥ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æžãŒ \A を付ã‘ã¦å§‹ã¾ã‚‹å ´åˆã€
PCRE_MULTILINEã®è¨
定ã«ã‚ˆã‚‰ãšã€å¸¸ã«ã‚¢ãƒ³ã‚«ãƒ¼ä»˜ãã¨ãªã‚Šã¾ã™ã€‚
終æ¢ç¬¦
æ–‡å—クラスã®å¤–å´ã§ã¯ã€ãƒ‘ターンã®ä¸ã®ãƒ‰ãƒƒãƒˆã¯éžå‡ºåŠ›æ–‡å—ã‚’å«ã‚€
(デフォルトã§ã¯)改行以外ã®å¯¾è±¡ã®å…¨ã¦ã®1æ–‡å—ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
PCRE_DOTALLオプショ
ンをè¨å®šã—ãŸå ´åˆã€ãƒ‰ãƒƒãƒˆã¯æ”¹è¡Œã«ã‚‚マッãƒã—ã¾ã™ã€‚ドットã®å‡¦ç†ã¯ã€
ãƒãƒƒãƒˆè¨˜å·ãŠã‚ˆã³ãƒ‰ãƒ«è¨˜å·ã¨ã¯å®Œå…¨ã«ç‹¬ç«‹ã—ã¦ã„ã¾ã™ã€‚共通ãªç‚¹ã¯å…±ã«
改行文å—ã‚’å«ã‚€ã“ã¨ã ã‘ã§ã™ã€‚
ドットã¯ã€æ–‡å—クラスã®ä¸ã§ã¯ç‰¹åˆ¥ãªæ„味をæŒã¡ã¾ã›ã‚“。
角括弧
å·¦ãƒ–ãƒ©ã‚±ãƒƒãƒˆã¯æ–‡å—クラスã®é–‹å§‹ã‚’表ã—ã€å³ãƒ–ラケットã«ã‚ˆã‚Šçµ‚了
ã—ã¾ã™ã€‚å³ãƒ–ラケットã¯ã€ãれ自体特別ãªã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。
å³ãƒ–ラケットãŒã‚¯ãƒ©ã‚¹ã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã—ã¦å¿…è¦ãªå ´åˆã€(ã‚‚ã—ã‚ã‚‹ãª
らã°ã€æœ€åˆã«ãƒãƒƒãƒˆè¨˜å·ã‚’æŒã£ã¦ããŸå¾Œã§)ã‚¯ãƒ©ã‚¹ã®æœ€åˆã®æ–‡å—データ
ãŒã‚ã‚‹ã‹ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
æ–‡å—クラスã¯ã€å¯¾è±¡ã®1æ–‡å—ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ãã®æ–‡å—ã¯ã‚¯ãƒ©ã‚¹ã«ã‚ˆã‚Š
定義ã•れる文å—集åˆã®ä¸ã«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã ã—ã€
ã‚¯ãƒ©ã‚¹ã®æœ€åˆã®æ–‡å—ãŒãƒãƒƒãƒˆè¨˜å·ã®å ´åˆã¯ã€å¯¾è±¡æ–‡å—ã¯æš®ã‚‰ã™ã«ã‚ˆã‚Š
定義ã•れる集åˆã®ã‚“課兄ã‚ã£ã¦ã¯ãªã‚Šã¾ã›ã‚“。
ãƒãƒƒãƒˆè¨˜å·ãŒã‚¯ãƒ©ã‚¹ã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã—ã¦å¿…è¦ãªå ´åˆã¯ã€å¿…ãšã€æœ€åˆã®
æ–‡å—ã¨ã—ãªã„ã‹ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹ã‚ˆã†ã«ã—ã¦ä¸‹
ã•ã„。
例ãˆã°ã€æ–‡å—クラス [aeiou] ã¯å°æ–‡å—ã®æ¯éŸ³ã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€
[^aeiou] ã¯å°æ–‡å—ã®æ¯éŸ³ä»¥å¤–ã®æ–‡å—ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
ãƒãƒƒãƒˆè¨˜å·ã¯ã€å˜åœ¨ã—ãªã„ã‚‚ã®ã‚’列挙ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã‚¯ãƒ©ã‚¹ã«ã‚ã‚‹
æ–‡å—を指定ã™ã‚‹ä¾¿åˆ©ãªè¡¨è¨˜ã§ã™ã€‚
ãƒãƒƒãƒˆè¨˜å·ã¯ã€è¨€æ˜Žã§ã¯ã‚りã¾ã›ã‚“。対象文å—列ã‹ã‚‰æ–‡å—を消費ã—ã€
ç¾åœ¨ã®ãƒã‚¤ãƒ³ã‚¿ãŒæ–‡å—列ã®çµ‚端ã«ã‚ã‚‹å ´åˆã«ã¯å¤±æ•—ã—ã¾ã™ã€‚
大文å—å°æ–‡å—を区別ã—ãªã„マッãƒãŒè¡Œã‚れãŸå ´åˆã€ã‚¯ãƒ©ã‚¹ã®æ–‡å—ã¯
大文å—ãƒ»å°æ–‡å—ã®ä¸¡æ–¹ã‚’表ã—ã¾ã™ã€‚ã“れã¯ã€ä¾‹ãˆã°ã€å¤§æ–‡å—å°æ–‡å—
を区別ã—ãªã„å ´åˆã®ãƒžãƒƒãƒ [aeiou] 㯠"a" ã¨åŒæ§˜ã« "A" ã«ãƒžãƒƒãƒ
ã—ã€æ–‡å—å°æ–‡å—を区別ã—ãªã„å ´åˆã®ãƒžãƒƒãƒ [^aeiou] 㯠"A" ã«ãƒžãƒƒ
ãƒã—ã¾ã›ã‚“。一方ã€å¤§æ–‡å—å°æ–‡å—を区別ã™ã‚‹å ´åˆã¯ãƒžãƒƒãƒã—ã¾ã™ã€‚
PCRE_DOTALLã¾ãŸã¯
PCRE_MULTILINEオプ
ションをã©ã®ã‚ˆã†ã«è¨å®šã—よã†ã¨ã‚‚改行文å—ã¯ã€æ–‡å—クラスã«ãŠã„ã¦ç‰¹
åˆ¥ãªæ–¹æ³•ã§å‡¦ç†ã•れã¾ã›ã‚“。[^a] ã®ã‚ˆã†ãªã‚¯ãƒ©ã‚¹ã¯å¸¸ã«æ”¹è¡Œã«ãƒžãƒƒãƒ
ã—ã¾ã™ã€‚
マイナス (ãƒã‚¤ãƒ•ン)æ–‡å—ã¯æ–‡å—クラスã®ä¸ã§æ–‡å—ã®ç¯„囲を指定ã™ã‚‹
ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚例ãˆã°ã€[d-m] 㯠d 㨠m ã®é–“ã®ã‚らゆる
æ–‡å—ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚é–“ã«ãƒŠã‚¹æ–‡å—ãŒã‚¯ãƒ©ã‚¹ã®ä¸ã«å¿…è¦ãªå ´åˆã¯ã€
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹ã‹ã€ã‚¯ãƒ©ã‚¹ã®æœ€åˆã¾ãŸã¯æœ€å¾Œã®
よã†ãªç¯„囲を示ã™ã¨ã¯è§£é‡ˆã•れãªã„å ´æ‰€ã«ä½¿ç”¨ã—ã¦ä¸‹ã•ã„。
æ–‡å—リテラル "]" ã‚’ç¯„å›²ã®æœ€å¾Œã®æ–‡å—ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾
ã›ã‚“。[W-]46] ã®ã‚ˆã†ãªãƒ‘ターンã¯ã€2ã¤æ–‡å—ã®ã‚¯ãƒ©ã‚¹("W" ãŠã‚ˆã³
"-")ã®å¾Œã«ãƒªãƒ†ãƒ©ãƒ«æ–‡å—列 "46]" ãŒç¶šã„ã¦ã„るクラスã¨ã—ã¦è§£é‡ˆ
ã•れã€"W46]"ã¾ãŸã¯ "-46]" ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ã—ã‹ã—ã€ç¯„囲ã®çµ‚端
ã¨ã—ã¦è§£é‡ˆã•れる "]" ã‚’ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã—ãŸå ´åˆã€
[W-\]46] ã¯ç¯„囲ã®å¾Œã«2ã¤ã®æ–‡å—ãŒç¶šã一ã¤ã®ã‚¯ãƒ©ã‚¹ã¨ã—ã¦è§£é‡ˆã•
れã¾ã™ã€‚"]" ã®8進ã‚ã‚‹ã„ã¯16進表ç¾ã‚‚範囲ã®çµ‚端ã¨ã—ã¦ä½¿ç”¨å¯èƒ½
ã§ã™ã€‚
範囲指定ã§ã¯ã€ASCII ç…§åˆå‡¦ç†ã‚’行ã„ã¾ã™ã€‚範囲ã§ã¯ã€[\000-\037]
ã®ã‚ˆã†ã«æ•°å€¤çš„ã«æŒ‡å®šã—ãŸæ–‡å—も使用å¯èƒ½ã§ã™ã€‚æ–‡å—ã‚’å«ã‚€ç¯„囲ãŒ
大文å—å°æ–‡å—を区別ã—ãªã„マッãƒãŒè¨å®šã•れã¦ã„ã‚‹ã¨ãã«ä½¿ç”¨ã•れãŸ
å ´åˆã€å¤§æ–‡å—å°æ–‡å—ã®ä¸¡æ–¹ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚例ãˆã°ã€[W-c] ã¯ã€
[][\^_`wxyzabc] ã«ç‰ä¾¡ã§ã‚りã€å¤§æ–‡å—å°æ–‡å—ã«é–¢ä¿‚ãªãマッãƒã—
ã¾ã™ã€‚æ–‡å—テーブル㧠"fr" ãƒã‚±ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã€
[\xc8-\xcb] ã¯ã€å¤§æ–‡å—å°æ–‡å—ã®åŒºåˆ¥ç„¡ãアクセント付ãã® E ã«
マッãƒã—ã¾ã™ã€‚
æ–‡å—åž‹ \d, \D, \s, \S, \w, \W ã¯æ–‡å—クラスã®ä¸ã§ã‚‚指定å¯èƒ½
ã§ã‚りã€ã‚¯ãƒ©ã‚¹ã«ãƒžãƒƒãƒã™ã‚‹æ–‡å—ã‚’è¿½åŠ ã—ã¾ã™ã€‚例ãˆã°ã€[\dABCDEF]
ã¯ã€16進数ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ãƒãƒƒãƒˆè¨˜å·ã¯å¤§æ–‡å—ã¨çµ„ã¿åˆã‚ã›ã¦
å°æ–‡å—ã«ãƒžãƒƒãƒãƒ³ã‚°??より範囲ã®ç‹ã„æ–‡å—集åˆã‚’ç°¡ä¾¿ã«æŒ‡å®šã™ã‚‹
ã“ã¨ãŒã§ãã¾ã™ã€‚
例ãˆã°ã€ã‚¯ãƒ©ã‚¹ [^\W_] ã¯æ–‡å—ã¾ãŸã¯æ•°å—ã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€ã‚¢ãƒ³ãƒ€
ースコアã«ã¯ãƒžãƒƒãƒã—ã¾ã›ã‚“。
\, -, (始端ã®)^ 以外ã®å…¨ã¦ã®è‹±æ•°å—ã§ãªã„æ–‡å—ãŠã‚ˆã³çµ‚端㮠] ã¯ã€
æ–‡å—クラスã«ãŠã„ã¦ç‰¹åˆ¥ã§ãªã„æ–‡å—ã§ã™ãŒã€ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã—ãŸå ´åˆã§ã‚‚
悪影響ã¯ã‚りã¾ã›ã‚“。
垂直ãƒãƒ¼
垂直ãƒãƒ¼æ–‡å—ã¯ã€é¸æŠžè‚¢ã‚’指定ã™ã‚‹ãƒ‘ターンã§ä½¿ç”¨ã•れã¾ã™ã€‚例ãˆã°ã€ãƒ‘ターン
gilbert|sullivan
ã¯ã€"gilbert" ã¾ãŸã¯ "sullivan" ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚é¸æŠžè‚¢ã®æ•°ã«
制é™ã¯ã‚りã¾ã›ã‚“。ã¾ãŸã€é¸æŠžè‚¢ã‚’空ã¨ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™
(ç©ºã®æ–‡å—列ã«ãƒžãƒƒãƒã—ã¾ã™)。マッãƒã®éŽç¨‹ã¯ã€å„é¸æŠžè‚¢ã‚’å·¦ã‹ã‚‰
å³ã«é€†ã«è¡Œã„ã€æœ€åˆã«æˆåŠŸã—ãŸã‚‚ã®ãŒä½¿ç”¨ã•れã¾ã™ã€‚é¸æŠžè‚¢ãŒ(以下
ã§èª¬æ˜Žã™ã‚‹)サブパターンã®ä¸ã«ã‚ã‚‹å ´åˆã€"æˆåŠŸã—ãŸ"ã¨ã„ã†ã“ã¨ã¯
サブパターンã®é¸æŠžè‚¢ã¨åŒæ§˜ã«ãƒ¡ã‚¤ãƒ³ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æ®‹ã‚Šã®éƒ¨åˆ†ã‚‚マッãƒ
ã—ãŸã¨ã„ã†ã“ã¨ã‚’æ„?Wã¾ã™ã€‚
内部オプションè¨å®š
PCRE_CASELESS ,
PCRE_MULTILINE ,
PCRE_DOTALL ,
PCRE_EXTENDEDã®
è¨å®šã¯ã€"(?" ãŠã‚ˆã³ ")" ã§æ‹¬ã£ãŸ Perl オプション文å—ã«ã‚ˆã‚Š
パターン内部ã§å¤‰æ›´å¯èƒ½ã§ã™ã€‚
i PCRE_CASELESSを指定
m PCRE_MULTILINEを指定
s PCRE_DOTALLを指定
x PCRE_EXTENDEDを指定
例ãˆã°ã€(?im) ã¯å¤§æ–‡å—å°æ–‡å—を区別ã—ãªã„ã€è¤‡æ•°è¡Œãƒžãƒƒãƒãƒ³ã‚°ã‚’
指定ã—ã¾ã™ã€‚ãƒã‚¤ãƒ•ン文å—ã‚’å‰ã«ã¤ã‘ã‚‹ã“ã¨ã«ã‚ˆã‚Šãã®ã‚ªãƒ—ション
を解除ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚(?im-sx) ã®ã‚ˆã†ã«è¨å®šã¨è§£é™¤ã‚’組ã¿åˆ
ã‚ã›ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ã“ã®å ´åˆã¯ã€PCRE_CASELESSãŠã‚ˆã³PCRE_MULTILINEãŒè¨å®šã•れã€
PCRE_DOTALLãŠã‚ˆã³
PCRE_EXTENDED
ãŒè§£é™¤ã•れã¾ã™ã€‚ã‚ã‚‹æ–‡å—ãŒãƒã‚¤ãƒ•ンã®å‰ã«ã‚‚後ã«ã‚‚指定ã•れãŸ
å ´åˆã€ãã®ã‚ªãƒ—ションã¯è§£é™¤ã•れã¾ã™ã€‚
オプション変更ã®é©ç”¨ç¯„囲ã¯è¨å®šãŒè¡Œã‚れãŸãƒ‘ターンã®å ´æ‰€ã«ä¾å˜
ã—ã¾ã™ã€‚サブパターンã®å¤–å´ã§è¨å®šã•れãŸå ´åˆã€ãã®åŠ¹æžœã¯ã€ã‚ªãƒ—
ションã®è¨å®šã‚ã‚‹ã„ã¯è§£é™¤ãŒãƒžãƒƒãƒãƒ³ã‚°ã®æœ€åˆã§è¡Œã‚れãŸã®ã¨åŒã˜
ã¨ãªã‚Šã¾ã™ã€‚次ã®ãƒ‘ターンã¯ã€å…¨ã¦å…¨ãåŒæ§˜ã«å‹•作ã—ã¾ã™ã€‚
(?i)abc
a(?i)bc
ab(?i)c
abc(?i)
ã¯ã‚³ãƒ³ãƒ‘イル後ã®ãƒ‘ターンã¨ã—ã¦ã¯ã€ãƒ‘ターン abc ã«
PCRE_CASELESS
ã‚’è¨å®šã—ãŸã‚‚ã®ã¨ãªã‚ŠåŒã˜ã«ãªã‚Šã¾ã™ã€‚言ã„ã‹ãˆã‚‹ã¨ã€ã“ã®ã‚ˆã†ãª
"最上ä½ã®"è¨å®šã¯ã€(サブパターン内部ã§ä»–ã®å¤‰æ›´ã‚’行ã‚ãªã„é™ã‚Š)
パターン全体ã«é©ç”¨ã•れã¾ã™ã€‚最上ä½ã¨åŒã˜è¨å®šãŒè¤‡æ•°å›žè¡Œã‚れã¦
ã„ã‚‹å ´åˆã€æœ€ã‚‚å³å´ã®è¨å®šãŒä½¿ç”¨ã•れã¾ã™ã€‚
サブパターンã®å†…部ã§ã‚ªãƒ—ションã®å¤‰æ›´ãŒè¡Œã‚れãŸå ´åˆã€åŠ¹æžœã¯
ç•°ãªã‚Šã¾ã™ã€‚ã“ã®å‹•作ã®å¤‰æ›´ã¯ã€Perl 5.005 ã§è¡Œã‚れã¾ã—ãŸã€‚
サブパターン内ã®ã‚ªãƒ—ション変更ã¯ã€ãれを指定ã—ãŸã‚µãƒ–パター
ンã®ãã®éƒ¨åˆ†ã«ã®ã¿å½±éŸ¿ã—ã¾ã™ã€‚ãã®ãŸã‚ã€
(a(?i)b)c
ã¯ã€abc ãŠã‚ˆã³ aBc ã«ãƒžãƒƒãƒã—ã€(PCRE_CASELESSãŒä½¿ç”¨ã•れ
ã¦ã„ãªã„ã¨ä»®å®šã—ãŸå ´åˆã€)ä»–ã®æ–‡å—列ã«ã¯ãƒžãƒƒãƒã—ã¾ã›ã‚“。
ã“ã®ã‚ˆã†ã«ã€ã‚ªãƒ—ションã¯ã€ãƒ‘ターンã®å„å ´æ‰€ã«ç•°ãªã£ãŸè¨å®šã‚’行ã†
ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ã‚ã‚‹é¸æŠžè‚¢ã«å¾¡ã“ãªã‚ŒãŸå¤‰æ›´ã¯å…¨ã¦ã€åŒã˜ã‚µãƒ–パ
ターン内ã®å¾Œã«ç¶šãæžã«æ³¢åŠã—ã¾ã™ã€‚例ãˆã°ã€
(a(?i)b|c)
ã¯ã€"C" ã«ãƒžãƒƒãƒã™ã‚‹éš›ã«æœ€åˆã®æžãŒã‚ªãƒ—ションè¨å®šå‰ã«ç ´æ£„
ã•れã¦ã„ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€"ab", "aB", "c", "C" ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
ã“れã¯ã€ã‚ªãƒ—ションè¨å®šã®åŠ¹æžœãŒã‚³ãƒ³ãƒ‘イル時ã«ç”Ÿã˜ã‚‹ã“ã¨ã«ã‚ˆã‚Š
ã¾ã™ã€‚ãã†ã§ãªã„ã¨ã€éžå¸¸ã«å¥‡å¦™ãªã“ã¨ãŒç”Ÿã˜ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚
PCRE 特有ã®ã‚ªãƒ—ションã€PCRE_UNGREEDYãŠã‚ˆã³PCRE_EXTRAã¯ãれãžã‚Œæ–‡å—
U ãŠã‚ˆã³ X を使用ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€Perl 互æ›ã®ã‚ªãƒ—ションã¨åŒæ§˜ã«å¤‰
æ›´ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
(?X) フラグã®è¨å®šã¯ç‰¹åˆ¥ã§ã€æœ€ä¸Šä½ã®å ´åˆã§ã‚‚ã€å¸¸ã«ãƒ‘ターン
内ã§ä»–ã®è¨å®šã‚’オンã«ã™ã‚‹å‰ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ã“ã®ãƒ•ラグã¯ã€æœ€åˆã«æŒ‡å®šã™ã‚‹ã®ãŒæœ€å–„ã§ã™ã€‚
サブパターン
ã‚µãƒ–ãƒ‘ã‚¿ãƒ¼ãƒ³ã¯æ‹¬å¼§(丸括弧)ã§åŒºåˆ†ã•れã€ãƒã‚¹ãƒˆãŒå¯èƒ½ã§ã™ã€‚
パターンã®ä¸€éƒ¨ã‚’サブパターンã¨ã—ã¦æŒ‡å®šã™ã‚‹ãŸã‚ã«ã¯ã€2ã¤ã®ã“
ã¨ã‚’行ã„ã¾ã™ã€‚
1. é¸æŠžè‚¢ã®é›†åˆã‚’ãƒãƒ¼ã‚«ãƒ«åŒ–ã—ã¾ã™ã€‚例ãˆã°ã€ãƒ‘ターン
cat(aract|erpillar|)
ã¯ã€å˜èªž "cat", "cataract", "caterpillar" ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
括弧をã¤ã‘ãªã„ã¨ã€ã“ã®ãƒ‘ターンã¯ã€"cataract",
"erpillar" ã¾ãŸã¯ç©ºã®æ–‡å—列ã«ãƒžãƒƒãƒã—ã¦ã—ã¾ã„ã¾ã™ã€‚
2. 括弧ã¯ã€ã‚µãƒ–パターンを(以下ã§å®šç¾©ã™ã‚‹)値をå–å¾—ã™ã‚‹ã‚µãƒ–パターン
ã¨ã—ã¦è¨å®šã—ã¾ã™ã€‚パターン全体ãŒãƒžãƒƒãƒã—ãŸã‚µãƒ–パターンã«ãƒžãƒƒãƒ
ã—ãŸå¯¾è±¡æ–‡å—列ã®ä¸€éƒ¨ã¯ã€
pcre_exec() ã® ovector
引数ã«ã‚ˆã‚Šã‚³ãƒ¼ãƒ«ã—ãŸå´ã«è¿”ã•れã¾ã™ã€‚値をå–å¾—ã™ã‚‹ã‚µãƒ–パターンã®
番å·ã‚’å¾—ã‚‹ãŸã‚ã«æ‹¬å¼§ã®å§‹ã¾ã‚Šã¯(1ã‹ã‚‰å§‹ã¾ã£ã¦)å·¦ã‹ã‚‰å³ã«æ•°ãˆã‚‰ã‚Œã¾ã™ã€‚
例ãˆã°ã€æ–‡å—列 "the red king" を次ã®ãƒ‘ターンã«ãƒžãƒƒãƒã•ã›ãŸå ´åˆã€
the ((red|white) (king|queen))
å–å¾—ã•れる部分文å—列ã¯ã€ "red king", "red", "king" ã§ã‚りã€
ãれãžã‚Œ 1, 2, 3 番ã¨ãªã‚Šã¾ã™ã€‚
括弧ãŒ2ã¤ã®æ©Ÿèƒ½ã‚’有ã—ã¦ã„ã‚‹ã¨ã„ã†äº‹å®ŸãŒå¸¸ã«è‰¯ã„æ–¹ã«åƒãã‚ã‘ã§
ã¯ã‚りã¾ã›ã‚“。値をå–å¾—ã™ã‚‹å¿…è¦ã¯ãªã„ãŒã€ã‚µãƒ–パターンを複数用
ã„ã‚‹ã“ã¨ãŒå¿…è¦ã§ã‚ã‚‹å ´åˆã‚‚å°‘ãªãã‚りã¾ã›ã‚“。左括弧ã®å¾Œã« "?:"
を付ã‘ãŸå ´åˆã€ãã®ã‚µãƒ–パターンã¯å€¤ã®å–得を行ã‚ãšã€å€¤ã‚’å–å¾—ã™ã‚‹
サブパターンã®ç•ªå·ã‚’計算ã™ã‚‹éš›ã«ã‚‚åŠ ç®—ã•れã¾ã›ã‚“。例ãˆã°ã€æ–‡å—列
"the white queen" ã¯æ¬¡ã®ãƒ‘ターンをマッãƒã•ã›ã¦ã¿ã¾ã—ょã†ã€‚
the ((?:red|white) (king|queen))
å–å¾—ã•れる部分文å—列ã¯ã€"white queen" 㨠"queen" ã§ã‚りã€
1番㨠2番ã«ãªã‚Šã¾ã™ã€‚部分文å—åˆ—ã®æœ€å¤§æ•°ã¯99ã§ã‚りã€å€¤ã®å–å¾—ã‚’
行ã†ã‚‚ã®ã¨è¡Œã‚ãªã„ã‚‚ã®ã‚’åˆã‚ã›ã¦å…¨ã‚µãƒ–ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æœ€å¤§æ•°ã¯
200ã§ã™ã€‚
便利ãªç•¥è¨˜ã¨ã—ã¦ã€ã‚ªãƒ—ションã®è¨å®šã‚’値をå–å¾—ã—ãªã„サブパターンã®
å…ˆé ã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æ–‡å—ã‚’ "?" 㨠":" ã®
é–“ã«å…¥ã‚Œã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€æ¬¡ã®2ã¤ã®ãƒ‘ターンã€
(?i:saturday|sunday)
(?:(?i)saturday|sunday)
ã¯å…¨ãåŒã˜æ–‡å—列集åˆã«ãƒžãƒƒãƒã—ã¾ã™ã€‚é¸æŠžè‚¢ã¯å·¦ã‹ã‚‰å³ã«è©¦è¡Œã•
れã€ã‚ªãƒ—ションã¯ã‚µãƒ–パターンã®çµ‚端ã«é”ã™ã‚‹ã¾ã§ãƒªã‚»ãƒƒãƒˆã•れãª
ã„ã®ã§ã€ã‚ã‚‹æžã«ã‚るオプションè¨å®šã¯å¾Œã«ç¶šãæžã«ã‚‚作用ã—ã¾ã™ã€‚
ã“ã®ãŸã‚ã€ä¸Šã®ãƒ‘ターンã¯ã€"Saturday" ã¨åŒæ§˜ã«"SUNDAY" ã«ã‚‚
マッãƒã—ã¾ã™ã€‚
繰り返ã—
繰り返ã—ã¯ã€å復指定åã«ã‚ˆã‚ŠæŒ‡å®šã—ã¾ã™ã€‚次ã®è¦ç´ ã®å¾Œã«ä»˜ã‘ã‚‹
ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚
æ–‡å—ã¾ãŸã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•ã‚ŒãŸæ–‡å—
ãƒ¡ã‚¿æ–‡å— .
æ–‡å—クラス
後方å‚ç…§ (次ã®ç¯€ã‚’å‚照下ã•ã„)
æ‹¬å¼§ã§æ‹¬ã£ãŸã‚µãƒ–パターン(言明を除ã - 以下をå‚照下ã•ã„)
通常ã®å復指定åã¯ã€å¤§æ‹¬å¼§ã®ä¸ã«2ã¤ã®æ•°ã‚’カンマã§åŒºåˆ‡ã£ã¦æŒ‡å®š
ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ãƒžãƒƒãƒå¯èƒ½ãªæœ€å°ã®æ•°ã¨æœ€å¤§ã®æ•°ã‚’指定ã—ã¾ã™ã€‚
指定ã™ã‚‹æ•°ã¯ã€65536 未満ã§ã‚ã‚Šã€æœ€åˆã®æ•°ã¯2ç•ªç›®ã®æ•°ä»¥ä¸‹ã§ã‚ã‚‹
å¿…è¦ãŒã‚りã¾ã™ã€‚例ãˆã°ã€
z{2,4}
ã¯ã€"zz", "zzz", "zzzz" ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚峿‹¬å¼§ã¯ãれ自体特別ãª
æ–‡å—ã§ã¯ã‚りã¾ã›ã‚“。2ç•ªç›®ã®æ•°å—ãŒçœç•¥ã•れãŸãŒã€ã‚«ãƒ³ãƒžãŒã‚ã‚‹å ´åˆã€
上é™ã¯è¨å®šã•れã¾ã›ã‚“。2ç•ªç›®ã®æ•°å—ã¨ã‚«ãƒ³ãƒžã®ä¸¡æ–¹ãŒçœç•¥ã•れãŸå ´åˆã€
å復指定åã¯ã€å¿…è¦ãªãƒžãƒƒãƒã®æ•°ãã®ã‚‚ã®ã‚’指定ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€
[aeiou]{3,}
ã¯3回以上æ¯éŸ³ãŒç¶šãã‚‚ã®ã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€ã‚‚ã£ã¨å¤šã„å ´åˆã«ã‚‚
マッãƒã—ã¾ã™ã€‚一方ã€
\d{8}
ã¯8æ¡ã®æ•°å—ã«ã®ã¿ãƒžãƒƒãƒã—ã¾ã™ã€‚左大括弧ã¯å復指定åã‚’ç½®ã‘ãªã„
å ´æ‰€ã¾ãŸã¯å復指定åã®æ§‹æ–‡ã«ãƒžãƒƒãƒã—ãªã„å ´æ‰€ã«ç½®ã„ãŸå ´åˆã€æ–‡å—
リテラルã¨ã—ã¦è§£é‡ˆã•れã¾ã™ã€‚例ãˆã°ã€{,6} ã¯å復挥Κåã§ã¯ãªãã€
4ã¤ã®æ–‡å—ã®æ–‡å—リテラルã¨ãªã‚Šã¾ã™ã€‚
å復指定åã¨ã—㦠{0} を指定ã™ã‚‹ã“ã¨ãŒã§ãã€å‰ã®é …ç›®ãŠã‚ˆã³å復
指定åãŒå˜åœ¨ã—ãªã„ã¨ã„ã†å¼ã‚’指定ã—ãŸã“ã¨ã«ãªã‚Šã¾ã™ã€‚
ç°¡å˜ã®ãŸã‚ã€æœ€ã‚‚使用ã•れる3ã¤ã®å復指定åã«ã¯ã€æ¬¡ã®ã‚ˆã†ãª1æ–‡å—
ã®çœç•¥åž‹ãŒã‚りã¾ã™ã€‚
* ã¯ã€{0,} ã¨ç‰ä¾¡ã§ã™ã€‚
+ ã¯ã€{1,} ã¨ç‰ä¾¡ã§ã™ã€‚
? ã¯ã€{0,1} ã¨ç‰ä¾¡ã§ã™ã€‚
å復をè¨å®šã›ãšã€ã©ã®æ–‡å—ã«ã‚‚マッãƒã—ãªã„次ã®ã‚ˆã†ãªã‚µãƒ–パターンã«
より無é™ãƒ«ãƒ¼ãƒ—を作æˆã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
(a?)*
以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Perl ãŠã‚ˆã³ PCRE ã¯ã“ã®ã‚ˆã†ãªãƒ‘ターンã«é–¢
ã—ã¦ã‚³ãƒ³ãƒ‘イル時ã«ã‚¨ãƒ©ãƒ¼ã‚’発生ã—ã¦ã„ã¾ã—ãŸã€‚ã—ã‹ã—ã€ä¾¿åˆ©ãªå ´
åˆãŒã‚ã‚‹ã®ã§ã€ã“ã®ã‚ˆã†ãªãƒ‘ターンã¯ç¾åœ¨ã¯è¨±å¯ã•れã¦ã„ã¾ã™ã€‚
ã—ã‹ã—ã€ä»–ã®ã‚µãƒ–パターンã®ç¹°ã‚Šè¿”ã—ãŒã©ã®æ–‡å—ã«ã‚‚マッãƒã—ãªã„
å ´åˆã€ãƒ«ãƒ¼ãƒ—ã¯å¼·åˆ¶çš„ã«ä¸æ–ã•れã¾ã™ã€‚
デフォルトã§ã¯ã€å復指定å㯠"貪欲"ã€ã¤ã¾ã‚Šã€æ®‹ã‚Šã®ãƒ‘ターンを
失敗ã•ã›ã‚‹ã“ã¨ãªã(許å¯ã•れãŸå›žæ•°ã®æœ€å¤§æ•°ã¾ã§)出æ¥ã‚‹ã ã‘多ã
ã®ã‚‚ã®ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ ã“ã®å‹•作ãŒå•題を生ã˜ã‚‹å¤å…¸çš„ãªä¾‹ã¨ã—ã¦ã¯ã€
C プãƒã‚°ãƒ©ãƒ ã®ã‚³ãƒ¡ãƒ³ãƒˆã«ãƒžãƒƒãƒã•ã›ã‚ˆã†ã¨ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚
コメントã¯ã€/* 㨠*/ ã®é–“ã«ã‚りã¾ã™ãŒã€ãã®ä¸ã«ã€ç‹¬ç«‹ã—ãŸæ–‡å—
* 㨠/ ãŒç¾ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚C ã®ã‚³ãƒ¡ãƒ³ãƒˆã«ãƒžãƒƒãƒã•ã›ã‚‹
ãŸã‚ã«ã€æ¬¡ã®ãƒ‘ターンを使用ã—ã¦ã¿ã¾ã—ょã†ã€‚
/\*.*\*/
ã‚’æ–‡å—列
/* first command */ not comment /* second comment */
ã«ä½¿ç”¨ã—ãŸå ´åˆã€å¤±æ•—ã—ã¾ã™ã€‚ã“れã¯ã€.* ã®è²ªæ¬²ã•ã®ã›ã„ã§æŒ‡å®šã—ãŸ
ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ–‡å—列全体ã«ãƒžãƒƒãƒã—ã¦ã—ã¾ã†ãŸã‚ã§ã™ã€‚
ã—ã‹ã—ã€å復指定åã®å¾Œã«ç–‘å•符を続ã‘ãŸå ´åˆã€è²ªæ¬²ã•ã¯æ¶ˆãˆã€
代ã‚ã‚Šã«æœ€å°ã®ãƒžãƒƒãƒã‚’行ã„ã¾ã™ã€‚ã“ã®ãŸã‚ã€ãƒ‘ターンã€
/\*.*?\*/
ã¯Cã‚³ãƒ¡ãƒ³ãƒˆã«æ£ã—ãマッãƒã—ã¾ã™ã€‚様々ãªå復指定åã®æ„味ã¯ã€
ä»–ã«ã¯å¤‰åŒ–ã›ãšã€å¥½ã¾ã—ã„マッãƒã®æ•°ã ã‘ãŒå¤‰æ›´ã•れã¾ã™ã€‚
ã“ã®ç–‘å•符ã®ä½¿ç”¨æ³•ã‚’å復指定åãŒãã®å³ã«ã‚ã‚‹å ´åˆã®ä½¿ç”¨æ³•ã¨æ··ä¹±ã—
ãªã„ã§ä¸‹ã•ã„。ã“ã®ã‚ˆã†ã«2種類ã®ä½¿ç”¨æ³•ãŒã‚ã‚‹ãŸã‚ã€æ™‚ã€…ã€æ¬¡ã®ã‚ˆã†ã«
2é‡ã«ä½¿ç”¨ã•れるã“ã¨ãŒã‚りã¾ã™ã€‚
\d??\d
é¸æŠžã«ã‚ˆã‚Š1æ¡ã®æ•°å—ã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æ®‹ã‚ŠãŒãƒžãƒƒãƒ
ã™ã‚‹å”¯ä¸€ã®æ–¹æ³•ã§ã‚ã‚‹å ´åˆã«ã¯ã€2æ¡ã®æ•°å€¤ã«ãƒžãƒƒãƒã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
PCRE_UNGREEDYオプショ
ンãŒè¨å®šã•れãŸå ´åˆ(Perl ã§ã¯ã“ã®ã‚ªãƒ—ションã¯ä½¿ç”¨ã§ãã¾ã›ã‚“)ã€å復
指定åã¯ãƒ‡ãƒ•ォルトã§ã¯è²ªæ¬²ã§ã¯ã‚りã¾ã›ã‚“。
ã—ã‹ã—ã€ã“ã®å復指定åã¯ã€å¾Œã‚ã«ç–‘å•符をã¤ã‘ã‚‹ã“ã¨ã«ã‚ˆã‚Šè²ªæ¬²
ã«ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚言ã„ã‹ãˆã‚‹ã¨ã€ç–‘å•符ã¯ã€ãƒ‡ãƒ•ォルトã®å‹•作
を逆転ã—ã¾ã™ã€‚
æ‹¬å¼§ã§æ‹¬ã‚‰ã‚ŒãŸã‚µãƒ–パターンãŒ1ã‚ˆã‚Šå¤šã„æœ€å°ã®å復数ã¾ãŸã¯æœ€å¤§æ•°
ã§æŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã€ã‚³ãƒ³ãƒ‘イル済ã¿ã®ãƒ‘ターンã®ãŸã‚ã«ã€æœ€å¤§
ã¾ãŸã¯æœ€å°ã®å¤§ãã•ã«å¿œã˜ã¦ã‚ˆã‚Šå¤šãã®ä¿å˜é ˜åŸŸãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚
パターンãŒã€.* ã¾ãŸã¯ .(0,) ã§å§‹ã¾ã‚Šã€(Perl ã§ç‰ä¾¡ãªã‚‚ã®ã¯ /s)
PCRE_DOTALLオプショ
ンãŒè¨å®šã•れã¦ã„ã‚‹å ´åˆã€. ã¯æ”¹è¡Œã«ãƒžãƒƒãƒã§ãるよã†ã«ãªã‚Šã€æš—é»™ã®
ã†ã¡ã«ã‚¢ãƒ³ã‚«ãƒ¼ä»˜ãã¨ãªã‚Šã¾ã™ã€‚
ã“れã¯ã€å¾Œã‚ã«ç¶šãã‚‚ã®ã«ã‚ˆã‚‰ãšã€å¯¾è±¡æ–‡å—列ã®å„æ–‡å—ã®ä½ç½®ã«
対ã—ã¦è©¦è¡Œã•れるãŸã‚ã§ã™ã€‚ã“ã®ãŸã‚ã€æœ€åˆã«ãƒžãƒƒãƒã—ãŸå¾Œã§
ã©ã“ã‹ã®ä½ç½®ã§å…¨ä½“ã®ãƒžãƒƒãƒã‚’å†ã³è¡Œã†ã“ã¨ã¯ã§ãã¾ã›ã‚“。
PCRE ã¯ã“ã®ã‚ˆã†ãªãƒ‘ターンを \A ãŒå‰ã«ã‚ã‚‹ã‚‚ã®ã¨ã—ã¦å‡¦ç†ã—ã¾ã™ã€‚
対象文å—åˆ—ãŒæ”¹è¡Œã‚’å«ã¾ãªã„ã“ã¨ãŒæ—¢çŸ¥ã®å ´åˆã€
パターン㌠.* ã§å§‹ã¾ã‚‹å ´åˆã®æœ€é©åŒ–ã®ãŸã‚ã«ã‚‚ã—ã㯠^ を用ã„ã¦
アンカーを陽ã«ç¤ºã™ãŸã‚ã«PCRE_DOTALLã‚’è¨å®šã™ã‚‹ä¾¡å€¤
ãŒã‚りã¾ã™ã€‚
値をå–å¾—ã™ã‚‹ã‚µãƒ–パターンãŒç¹°ã‚Šè¿”ã•れる時ã€å–å¾—ã•れる値ã¯ã€
最後ã®ç¹°ã‚Šè¿”ã—ã§ãƒžãƒƒãƒã—ãŸéƒ¨åˆ†æ–‡å—列ã§ã™ã€‚例ãˆã°ã€
(tweedle[dume]{3}\s*)+
"tweedledum tweedledee" をマッãƒã•ã›ãŸå ´åˆã€å–å¾—ã•れる部分文
å—列ã®å€¤ã¯ã€"tweedledee" ã§ã™ã€‚ã—ã‹ã—ã€ãƒã‚¹ãƒˆã•れãŸå€¤ã‚’å–å¾—
ã™ã‚‹ã‚µãƒ–パターンãŒã‚ã‚‹å ´åˆã€å¯¾å¿œã™ã‚‹å–得値ã¯å‰ã®ç¹°ã‚Šè¿”ã—ã§æŒ‡
定ã•れãŸã‚‚ã®ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚例ãˆã°ã€
/(a|(b))+/
ã‚’ "aba" ã«ãƒžãƒƒãƒã•ã›ã‚‹ã¨ã€2番目ã«å–å¾—ã•れる部分文å—列ã¯ã€
"b" ã«ãªã‚Šã¾ã™ã€‚
後方å‚ç…§
æ–‡å—クラスã®å¤–ã§ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®å¾Œã« 0 より大ãã„æ•°å—ã‚’
付ã‘ãŸã‚‚ã®ã¯ãƒ‘ターンã§ä»¥å‰ã«(ã™ãªã‚ã¡å·¦ã«ã‚ã‚‹)値をå–å¾—ã—ãŸ
サブパターンã«å¯¾ã™ã‚‹å¾Œæ–¹å‚ç…§ã§ã‚りã€å‰ã«ã‚る値ã®å–得を行ã†
å·¦æ‹¬å¼§ã®æ•°ã¾ã§ä½¿ç”¨å¯èƒ½ã§ã™ã€‚
ã—ã‹ã—ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®å¾Œã«ç¶šã10進数ãŒ10未満ã®å ´åˆã¯å¸¸ã«
後方å‚ç…§ã¨ã—ã¦è§£é‡ˆã•れã€ãƒ‘ターン全体ã®å€¤ã‚’å–å¾—ã™ã‚‹å·¦æ‹¬å¼§ã®æ•°
ã«æº€ãŸãªã„å ´åˆã«ã®ã¿ã‚¨ãƒ©ãƒ¼ã¨ãªã‚Šã¾ã™ã€‚
言ã„ã‹ãˆã‚‹ã¨ã€å‚ç…§ã•れる括弧ã¯10æœªæº€ã®æ•°ã«ã¤ã„ã¦ã¯å‚ç…§ã™ã‚‹å´
ã®å·¦ã«ã‚ã‚‹å¿…è¦ãŒãªã„ã¨ã„ã†ã“ã¨ã§ã™ã€‚
ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®å¾Œã«æ•°å—ãŒç¶šãå ´åˆã®å‡¦ç†ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€
上記㮠"ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥"ã¨ã„ã†é¡Œã®ç¯€ã‚’å‚照下ã•ã„。
後方å‚ç…§ã¯ã€ã‚µãƒ–パターン自体ãŒãƒžãƒƒãƒã™ã‚‹ã‚‚ã®ã‚ˆã‚Šã‚€ã—ã‚ã€
ç¾åœ¨ã®å¯¾è±¡æ–‡å—列ã«ãŠã‘る値をå–å¾—ã™ã‚‹ãƒ‘ターンãŒå®Ÿéš›ã«ãƒžãƒƒãƒã—
ãŸã‚‚ã®ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ã“ã®ãŸã‚ã€ãƒ‘ターン
(sens|respons)e and \1ibility
ã¯ã€"sense and sensibility" ãŠã‚ˆã³ "response and responsi-
bility" ã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€"sense and responsibility" ã«ã¯
マッãƒã—ã¾ã›ã‚“。後方å‚ç…§ã®æ™‚点ã§ã€å¤§æ–‡å—å°æ–‡å—を区別ã—ãŸãƒžãƒƒãƒ
ãŒæœ‰åйã®å ´åˆã€æ–‡å—ã®å¤§æ–‡å—å°æ–‡å—ãŒé–¢ä¿‚ã—ã¾ã™ã€‚例ãˆã°ã€
((?i)rah)\s+\1
ã¯ã€"rah rah" ãŠã‚ˆã³ "RAH RAH" ã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€
å…ƒã®å–å¾—ã—ãŸã‚µãƒ–パターンã¯å¤§æ–‡å—å°æ–‡å—を区別ã›ãšãƒžãƒƒãƒã—ã¦ã„
ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€"RAH rah" ã«ã¯ãƒžãƒƒãƒã—ã¾ã›ã‚“。
åŒã˜ã‚µãƒ–パターンã«è¤‡æ•°å›žã®å¾Œæ–¹å‚照を行Fã“ã¨ãŒã§ãã¾ã™ã€‚ã‚ã‚‹
サブパターンãŒç‰¹å®šã®ãƒžãƒƒãƒã§å®Ÿéš›ã«ã¯ä½¿ç”¨ã•れã¦ã„ãªã„å ´åˆã€
後方å‚ç…§ã¯å¸¸ã«å¤±æ•—ã—ã¾ã™ã€‚例ãˆã°ã€ãƒ‘ターン
(a|(bc))\2
ã¯ã€"bc" ã§ã¯ãªã "a" ã«æœ€åˆã«ãƒžãƒƒãƒã™ã‚‹å ´åˆã«å¸¸ã«å¤±æ•—ã—ã¾ã™ã€‚
最大 99 個ã®å¾Œæ–¹å‚照を使用ã§ãã‚‹ãŸã‚ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®å¾Œã«
æ•°å—ãŒç¶šãã‚‚ã®ã¯å…¨ã¦å¾Œæ–¹å‚照番å·ã®å¯èƒ½æ€§ãŒã‚る集åˆã¨ã—ã¦è§£é‡ˆ
ã•れã¾ã™ã€‚
パターンã®å¾Œã«æ•°å—ãŒç¶šãå ´åˆã€å¾Œæ–¹å‚照を終了ã™ã‚‹ãŸã‚ã«
ãªã‚“らã‹ã®åŒºåˆ‡ã‚Šæ–‡å—ã‚’ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚
PCRE_EXTENDEDオプ
ションをè¨å®šã—ã¦ã„ã‚‹å ´åˆã€ç©ºç™½ã‚’区切り文å—ã¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
ãã®ä»–ã®å ´åˆã¯ç©ºã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’使用ã§ãã¾ã™ã€‚
å‚ç…§ã™ã‚‹æ‹¬å¼§ã®ä¸ã«ã‚る後方å‚ç…§ã¯ã€ã‚µãƒ–パターンを最åˆã«ä½¿ç”¨ã—
ãŸéš›ã«å¤±æ•—ã—ã¾ã™ã€‚ã“ã®ãŸã‚ã€(a\1) ã¯ä½•ã«ã‚‚マッãƒã—ã¾ã›ã‚“。
ã—ã‹ã—ã€ã“ã®ã‚ˆã†ãªå‚ç…§ã¯ã€è¤‡æ•°å›žä½¿ç”¨ã™ã‚‹ã‚µãƒ–パターンã®å†…部ã§
有用ã§ã™ã€‚例ãˆã°ã€æ¬¡ã®ãƒ‘ターン
(a|b\1)+
ã¯ã€"a" ã®ä¸¦ã³ã€ãŠã‚ˆã³ "aba"ã€"ababaa" ç‰ã«ã‚‚マッãƒã—ã¾ã™ã€‚
サブパターンã®å„å復ã«ãŠã„ã¦ã€å¾Œæ–¹å‚ç…§ã¯ã€å‰ã®ç¹°ã‚Šè¿”ã—ã«å¯¾å¿œ
ã™ã‚‹æ–‡å—列ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ã“れを動作ã•ã›ã‚‹ãŸã‚ã«ã€æœ€åˆã®å復
時ã«å¾Œæ–¹å‚ç…§ã«ãƒžãƒƒãƒã™ã‚‹å¿…è¦ãŒãªã„よã†ãªãƒ‘ターンã§ã‚ã‚‹å¿…è¦ãŒ
ã‚りã¾ã™ã€‚ã“れã¯ä¸Šã®ä¾‹ã®ã‚ˆã†ã«é¸æŠžã‚’使用ã™ã‚‹ã‹ã€ã‚¼ãƒã‚’最å°ã¨
ã™ã‚‹å復指定åã«ã‚ˆã‚Šè¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚
言明
言明ã¯ã€ç¾åœ¨ãƒžãƒƒãƒã‚’行ã£ã¦ã„ã‚‹ä½ç½®ã®å¾Œã«ç¶šãã‹å‰ã«ã‚ã‚‹æ–‡å—ã«
対ã™ã‚‹ãƒ†ã‚¹ãƒˆã§ã‚りã€å®Ÿéš›ã«ã¯æ–‡å—ã¸ã®ä½œç”¨ã‚’行ã„ã¾ã›ã‚“。
\b, \B, \A, \Z, \z, ^, $ ã®ã‚ˆã†ãªç°¡å˜ãªè¨€æ˜Žã‚³ãƒ¼ãƒ‰ã‚’以下ã§èª¬
明ã—ã¾ã™ã€‚より複雑ãªè¨€æ˜Žã¯ã€ã‚µãƒ–パターンã¨ã—ã¦ã‚³ãƒ¼ãƒ‰åŒ–ã•れã¾
ã™ã€‚2種類ã®è¨€æ˜ŽãŒã‚りã¾ã™ã€‚対象文å—列ã«ãŠã„ã¦ç¾åœ¨ä½ç½®ã®å‰ã‚’
見るもã®ã¨ã€å¾Œã‚を見るもã®ã§ã™ã€‚
言明サブパターンã¯ã€ç¾åœ¨ãƒžãƒƒãƒã‚’行ã£ã¦ã„ã‚‹ä½ç½®ã‚’変更ã—ã—ãªã„
ã“ã¨ã‚’除ãã€é€šå¸¸ã¨åŒã˜ã‚ˆã†ã«ãƒžãƒƒãƒã•れã¾ã™ã€‚剿–¹ã¸ã®è¨€æ˜Žã¯ã€
肯定言明ã®å ´åˆ (?= ã§ã€å¦å®šè¨€æ˜Žã®å ´åˆ (?! ã§å§‹ã¾ã‚Šã¾ã™ã€‚例ãˆã°ã€
\w+(?=;)
ã¯ã€ã‚»ãƒŸã‚³ãƒãƒ³ãŒå¾Œã«ç¶šãå˜èªžã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€ãƒžãƒƒãƒã™ã‚‹ã‚‚ã®
ã«ã¯ã€ã‚»ãƒŸã‚³ãƒãƒ³ã‚’å«ã¾ã›ã‚“。ãã—ã¦ã€
foo(?!bar)
ã¯ã€"bar" ãŒå¾Œã‚ã«ç¶šã‹ãªã„ "foo" ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
見ã‹ã‘ã¯ä¼¼ã¦ã„ã‚‹ãƒ‘ã‚¿ãƒ¼ãƒ³ã«æ³¨æ„ã—ã¦ä¸‹ã•ã„。
(?!foo)bar
ã¯ã€"foo" 以外ã®ã‚‚ã®ãŒå‰ã«ã‚ã‚‹ "bar" ã®å˜åœ¨ã‚’見ã¤ã‘られã¾ã›ã‚“。
次ã®3æ–‡å—㌠"bar" ã§ã‚ã‚‹å ´åˆã«ã€(?!foo) ã¯å¸¸ã« TRUE ã¨ãªã‚‹ãŸã‚
ã«ã€ã“ã®ãƒ‘ターンã¯ã€"bar" ã®å˜åœ¨ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ããªã„ã®ã§ã™ã€‚
ã“ã®å‹•作を実ç¾ã™ã‚‹ãŸã‚ã«ã¯ã€å¾Œæ–¹è¨€æ˜ŽãŒå¿…è¦ã§ã™ã€‚
後方言明ã¯ã€è‚¯å®šè¨€æ˜Žã®å ´åˆ (?<= ã§ã€å¦å®šè¨€æ˜Žã®å ´åˆ (?<!
ã§å§‹ã¾ã‚Šã¾ã™ã€‚例ãˆã°ã€
(?<!foo)bar
ã¯ã€"foo" ãŒå‰ã«ãªã„ "bar" ã®å˜åœ¨ã‚’見ã¤ã‘ã¾ã™ã€‚後方言明ã®å†…容
ã¯ã€ãƒžãƒƒãƒã™ã‚‹æ–‡å—列全体ãŒå›ºå®šé•·ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«åˆ¶é™ã•
れã¦ã„ã¾ã™ã€‚ã—ã‹ã—ã€è¤‡æ•°ã®é¸æŠžè‚¢ãŒã‚ã‚‹å ´åˆã€å…¨ã¦ã®åŒã˜å›ºå®šé•·
ã§ã‚ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。ã¤ã¾ã‚Šã€
(?<=bullock|donkey)
ã¯ä½¿ç”¨å¯èƒ½ã§ã™ãŒã€
(?<!dogs?|cats?)
ã¯ã‚³ãƒ³ãƒ‘イル時ã«ã‚¨ãƒ©ãƒ¼ã‚’生ã˜ã¾ã™ã€‚ç•°ãªã£ãŸé•·ã•ã®æ–‡å—列ã«ãƒžãƒƒ
ãƒã™ã‚‹æžã¯ã€å¾Œæ–¹è¨€æ˜Žã®æœ€ä¸Šä½ã§ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯ã€
å…¨ã¦ã®æžã®åŒã˜é•·ã•ã®æ–‡å—列ã«ãƒžãƒƒãƒã™ã‚‹å¿…è¦ãŒã‚ã‚‹ Perl 5.005
ã«å¯¾ã—ã¦æ‹¡å¼µã•れã¦ã„ã¾ã™ã€‚次ã®ã‚ˆã†ãªè¨€æ˜Ž
(?<=ab(c|de))
ã¯ã€æœ€ä¸Šä½ã®æžãŒ2ã¤ã®ç•°ãªã£ãŸé•·ã•ã«ãƒžãƒƒãƒã—å¾—ã‚‹ãŸã‚ã€ä½¿ç”¨ã§ã
ã¾ã›ã‚“。ã—ã‹ã—ã€æœ€ä¸Šä½ã®æžã‚’2ã¤ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã«æ›¸ãæ›ãˆãŸå ´åˆã¯ã€
使用å¯èƒ½ã§ã™ã€‚
(?<=abc|abde)
後方言明ã®å®Ÿè£…ã«ãŠã„ã¦ã¯ã€é¸æŠžè‚¢æ¯Žã«ä¸€æ™‚çš„ã«å›ºå®šã®å¹…ã ã‘ç¾åœ¨ã®
ä½ç½®ã‚’後退ã—ã€ãƒžãƒƒãƒã‚’試ã¿ã¾ã™ã€‚ç¾åœ¨ä½ç½®ã®å‰ã«ååˆ†ãªæ–‡å—ãŒãªã„
å ´åˆã¯ã€ãƒžãƒƒãƒã¯å¤±æ•—ã¨ã¿ãªã•れã¾ã™ã€‚1度ã—ã‹ä½¿ç”¨ã•れãªã„サブパ
ターンã¨çµ„ã¿åˆã‚ã›ãŸå¾Œæ–¹è¨€æ˜Žã¯ã€æ–‡å—列ã®çµ‚端ã§ã®ãƒžãƒƒãƒãƒ³ã‚°ã«
ç‰¹ã«æœ‰ç”¨ã§ã™ã€‚ç¯€ã®æœ€å¾Œã«1度ã ã‘使用ã™ã‚‹ã‚µãƒ–パターンã®ä¾‹ã‚’示ã—
ã¾ã™ã€‚
(ã‚らゆる種類ã®)複数ã®è¨€æ˜Žã‚’連続ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚
例ãˆã°ã€
(?<=\d{3})(?<!999)foo
ã¯å‰ã« "999" ã§ãªã„3æ¡ã®æ•°å—ãŒã‚ã‚‹ "foo" ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
å„言明ã¯å¯¾è±¡æ–‡å—列ã®åŒã˜å ´æ‰€ã«ç‹¬ç«‹ã—ã¦é©ç”¨ã•れるã“ã¨ã«æ³¨æ„ã—ã¦ä¸‹
ã•ã„。ã¾ãšã€å‰ã®3æ–‡å—ãŒå…¨ã¦æ•°å—ã§ã‚ã‚‹ã“ã¨ãŒãƒã‚§ãƒƒã‚¯ã•れã€ç¶šã„ã¦ã€
åŒã˜3æ–‡å—ãŒ"999"ã§ãªã„ã“ã¨ãŒç¢ºèªã•れã¾ã™ã€‚ã“ã®ãƒ‘ターンã¯ã€"foo"ã®
å‰ã«6å€‹ã®æ–‡å—ãŒã‚りã€ãã®çŒœç–‘ã‚‡ãŒæ•°å—ã§æœ€å¾Œã®3æ–‡å—ãŒ"999"ã§ãªã„パ
ターンã«ã¯ãƒžãƒƒãƒã—ã¾ã›ã‚“。例ãˆã°ã€"123abcfoo"ã«ã¯ãƒžãƒƒãƒã—ã¾ã›ã‚“。
ã“れを行ã†ãƒ‘ã‚¿ãƒ¼ãƒ³ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
(?<=\d{3}...)(?<!999)foo
ã“ã®æ™‚ã€æœ€åˆã®è¨€æ˜Žã¯ã€å…ˆè¡Œã™ã‚‹6ã¤ã®æ–‡å—を探ã—ã€æœ€åˆã®3æ–‡å—ãŒæ•°å—
ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚ç¶šã„ã¦ã€2番目ã®è¨€æ˜Žã¯ã€å…ˆè¡Œã™ã‚‹3æ–‡å—ãŒ
"999"ã§ãªã„ã“ã¨ã‚’確èªã—ã¾ã™ã€‚
言明ã¯ã€è‡ªç”±ã«çµ„ã¿åˆã‚ã›ã¦ãƒã‚¹ãƒˆã•ã›ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚例ãˆã°ã€
(?<=(?<!foo)bar)baz
ã¯ã€"bar" ãŒå‰ã«ã‚りã€é€†ã« "foo" ãŒå‰ã«ãªã„ "baz" ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
一方ã€
(?<=\d{3}(?!999)...)foo
ã¯ã€3æ¡ã®æ•°ãŒå…ˆè¡Œã—ã€ä¸ã®3æ–‡å—ãŒ"999"ã§ãªã„"foo"ã«ãƒžãƒƒãƒã™ã‚‹åˆ¥ã®
パターンã§ã™ã€‚
言明ã®ã‚µãƒ–パターンã¯å€¤ã‚’å–å¾—ã™ã‚‹ã‚µãƒ–パターンã§ã¯ãªãã€ç¹°ã‚Š
è¿”ã•れãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。ãれã¯ã€åŒã˜ã“ã¨ã‚’複数回言明ã™ã‚‹ã®
ã¯æ„味ãŒãªã„ã‹ã‚‰ã§ã™ã€‚ã‚る言明ãŒå€¤ã‚’å–å¾—ã™ã‚‹ã‚µãƒ–パターンを
ä¸ã«å«ã‚“ã§ã„ã‚‹å ´åˆã€ãƒ‘ターン全体ã®ä¸ã§å€¤ã‚’å–å¾—ã™ã‚‹ã‚µãƒ–パター
ンを数ãˆã‚‹ãŸã‚ã«å¸¸ã«æ•°ãˆä¸Šã’られã¾ã™ã€‚
å–å¾—ã—ãŸéƒ¨åˆ†æ–‡å—列ã¯ã€è‚¯å®šè¨€æ˜Žã§ã¯ä½¿ç”¨ã•れã¾ã™ãŒã€å¦å®šè¨€æ˜Ž
ã§ã¯æ„味をæŒã¡ã¾ã›ã‚“。
è¨€æ˜Žã®æ‹¬å¼§ã§æ‹¬ã‚‰ã‚ŒãŸã‚µãƒ–ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æ•°ã¯ã€æœ€å¤§ 200 ã§ã™ã€‚
一回ã ã‘使用ã™ã‚‹ã‚µãƒ–パターン
å復を最大化ãŠã‚ˆã³æœ€å°åŒ–ã™ã‚‹å ´åˆã¯å…±ã«ã€å¾Œã«ç¶šãã‚‚ã®ã¸ã®ãƒžãƒƒ
ãƒãŒå¤±æ•—ã—ãŸå ´åˆã€å復数を変ãˆãŸå ´åˆã«ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æ®‹ã‚Šã«ãƒžãƒƒãƒ
ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã©ã†ã‹ã‚’調ã¹ã‚‹ãŸã‚ã«å復ã™ã‚‹é …ç›®ãŒå†è©•価ã•
れã¾ã™ã€‚
時々ã€ã“ã†ã—ãŸå‹•作を行ã‚ãªã„æ–¹ãŒä¾¿åˆ©ãªã“ã¨ãŒã‚Šã¾ã™ã€‚
ãれã¯ã€ãƒ‘ターンã®ä½œè€…ãŒç¶šã‘ã¦ã„ã価値ãŒãªã„ã¨ã‚ã‹ã£ãŸæ™‚ã«
マッãƒã®ç‰¹æ€§ã‚’変更ã™ã‚‹ã‹ã€ä»–ã®ã“ã¨ãŒãŠãるよりもå‰ã«å¤±æ•—ã•ã›
ã‚‹å ´åˆã§ã™ã€‚
例ãˆã°ã€ãƒ‘ターン \d+foo を次ã®å¯¾è±¡ã«é©ç”¨ã—ãŸå ´åˆã‚’考ãˆã¦ã¿ã¾
ã—ょã†ã€‚
123456bar
6æ¡ã®æ•°å—ã«ãƒžãƒƒãƒã—ãŸå¾Œã€"foo" ã«ãƒžãƒƒãƒã™ã‚‹ã®ã«å¤±æ•—ã—ã¾ã™ã€‚
マッãƒå‡¦ç†ã®é€šå¸¸ã®å‹•作ã§ã¯ã€5æ¡ã®æ•°å—ã®ã¿ãŒ \d+ ã«ãƒžãƒƒãƒã™ã‚‹
ã¨ã—ã¦ã§å†åº¦è©¦è¡Œã‚’行ã„ã€ç¶šã„㦠4 æ¡ã¨ã„ã£ãŸã‚ˆã†ã«å®Œå…¨ã«å¤±æ•—
ã™ã‚‹ã¾ã§è©¦è¡Œã‚’行ã„ã¾ã™ã€‚ä½¿ã„æ¨ã¦ã®ã‚µãƒ–パターンã¯ã€
パターンã®ä¸€éƒ¨ãŒä¸€å›žãƒžãƒƒãƒã—ãŸã‚‰ã€å†è©•価ã•れãªã„ã“ã¨ã‚’指定ã™
ã‚‹ã‚‚ã®ã§ã™ã€‚ã“ã®ãŸã‚ã€æœ€åˆã« "foo" ã¸ã®ãƒžãƒƒãƒã«å¤±æ•—ã—ãŸæ™‚点
ã§ã€ãŸã ã¡ã«ãƒžãƒƒãƒãŒã¨ã‚Šã‚„ã‚られã¾ã™ã€‚
表記ã«ã¯ã€æ¬¡ã®ä¾‹ã®ã‚ˆã†ã« (?> ã§å§‹ã¾ã‚‹åˆ¥ã®ç‰¹åˆ¥ãªæ‹¬å¼§ã‚’用ã„
ã¾ã™ã€‚
(?>\d+)bar
ã“ã®ç¨®é¡žã®æ‹¬å¼§ã¯ã€ä¸€å›žãƒžãƒƒãƒãŒè¡Œã‚れãŸãƒ‘ターンã®ä¸€éƒ¨ã«éµã‚’ã‹
ã‘ã€ãã®ãƒ‘ターンã¸ã®å†ãƒžãƒƒãƒã¯å¤±æ•—ã—ã¾ã™ã€‚
ã—ã‹ã—ã€ãƒžãƒƒãƒã«æˆåŠŸã™ã‚‹å‰ã®å†ãƒžãƒƒãƒã¯ã€é€šå¸¸ã¨åŒæ§˜ã«å‹•作ã—ã¾
ã™ã€‚
ã“ã®åž‹ã®ã‚µãƒ–パターンã¯ã€å¯¾è±¡æ–‡å—列ã®ç¾åœ¨ã®ç‚¹ã«ã‚¢ãƒ³ã‚«ãƒ¼ãŒã‚ã‚‹
å ´åˆã€åŒã˜å¤ç«‹ã—ãŸãƒ‘ターンãŒãƒžãƒƒãƒã™ã‚‹æ–‡å—列ã«ãƒžãƒƒãƒã™ã‚‹ã¨ã„
ã†ã‚ˆã†ã«ã‚‚説明ã§ãã¾ã™ã€‚
ä½¿ã„æ¨ã¦ã®ã‚µãƒ–パターンã¯ã€ã‚µãƒ–パターンã®å€¤ã‚’å–å¾—ã—ã¾ã›ã‚“。
上ã®ä¾‹ã®ã‚ˆã†ã«ç°¡å˜ãªå ´åˆã¯ã€ã§ãã‚‹ã ã‘多ãã®ã‚‚ã®ã‚’å‘‘ã¿è¾¼ã‚€
よã†å復を最大化ã™ã‚‹ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚
ã“ã®ãŸã‚ã€\d+ ãŠã‚ˆã³ \d+? ãŒæ•°å—ã®æ•°ã‚’調整ã—ã¤ã¤æ®‹ã‚Šã®ãƒ‘ターン
ãŒãƒžãƒƒãƒã™ã‚‹ã‚ˆã†ãƒžãƒƒãƒã‚’繰り返ã™ã®ã«å¯¾ã—ã¦ã€(?>\d+) ã¯
æ•°å—ã®ä¸¦ã³å…¨ä½“ã«ã®ã¿ãƒžãƒƒãƒãŒå¯èƒ½ã§ã™ã€‚
ã“ã®æ§‹é€ ã¯ã€ä»»æ„ã®è¤‡é›‘ãªã‚µãƒ–パターンをå«ã‚€ã“ã¨ãŒã§ãã€ãƒã‚¹ãƒˆ
ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
ä½¿ã„æ¨ã¦ã®ã‚µãƒ–パターンã¯ã€æ–‡å—列ã®çµ‚端ã«å¯¾ã™ã‚‹ãƒžãƒƒãƒã‚’効率的
ã«æŒ‡å®šã™ã‚‹ãŸã‚ã«å¾Œæ–¹è¨€æ˜Žã‚’組ã¿åˆã‚ã›ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚次ã®ç°¡å˜
ãªãƒ‘ターンを見ã¦ã¾ã—ょã†ã€‚
abcd$
マッãƒã—ãªã„é•·ã„æ–‡å—列ã«é©ç”¨ã—ãŸå ´åˆã‚’考ãˆã¾ã™ã€‚
マッãƒã¯å·¦ã‹ã‚‰å³ã«è¡Œã‚れるãŸã‚ã€PCRE ã¯å¯¾è±¡ã® "a" を探ã—ã€
後ã«ã‚ã‚‹ã‚‚ã®ãŒãƒ‘ã‚¿ãƒ¼ãƒ³ã®æ®‹ã‚Šã«ãƒžãƒƒãƒã™ã‚‹ã‹ã©ã†??調ã¹ã¾ã™ã€‚
ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ¬¡ã®ã‚ˆã†ã«æŒ‡å®šã•れãŸå ´åˆã€
^.*abcd$
最åˆã® .* ã¯ã¾ãšæ–‡å—列全体ã«ãƒžãƒƒãƒã—ã¾ã™ãŒã€ã“れã«å¤±æ•—ã—ãŸå ´
åˆã€æœ€å¾Œã®æ–‡å—以外ã®å…¨ã¦ã®ã‚‚ã®ã«ãƒžãƒƒãƒã™ã‚‹ã‚ˆã†å†åº¦ãƒžãƒƒãƒã‚’
行ã„ã€ç¶šã„ã¦æœ€å¾Œã®2æ–‡å—以外ã¨ã„ã†é¢¨ã«å‹•作ã—ã¾ã™ã€‚
"a" ã®æ¤œç´¢ã‚’æ–‡å—列全体ã«å¯¾ã—ã¦å·¦ã‹ã‚‰å³ã«å†åº¦è¡Œã†ãŸã‚ã€
効率ã¯è‰¯ãã‚りã¾ã›ã‚“。ã—ã‹ã—ã€ãƒ‘ターンを次ã®ã‚ˆã†ã«æ›¸ã„ãŸå ´åˆã€
^(?>.*)(?<=abcd)
ã“ã®å ´åˆã¯ã€.* ã«é–¢ã™ã‚‹å†æ¤œç´¢ã¯è¡Œã‚れãšã€æ–‡å—列全体ã«ã®ã¿ãƒžãƒƒ
ãƒã—ã¾ã™ã€‚ç¶šã後方言明ã¯ã€æœ€å¾Œã®4æ–‡å—ã«å¯¾ã™ã‚‹è©¦è¡Œã‚’1回ã ã‘行
ã„ã¾ã™ã€‚ã“れãŒå¤±æ•—ã—ãŸå ´åˆã€ãƒžãƒƒãƒã¯ãŸã ã¡ã«å¤±æ•—ã—ã¾ã™ã€‚é•·ã„
æ–‡å—列ã®å ´åˆã€ã“ã®æ–¹æ³•ã«ã‚ˆã‚‹å®Ÿè¡Œæ™‚é–“ã«ã¯ã‹ãªã‚Šã®å·®ãŒç”Ÿã˜ã¾ã™ã€‚
パターンã®ç„¡åˆ¶é™ã®ç¹°ã‚Šè¿”ã—ã‚’ã‚µãƒ–ãƒ‘ã‚¿ãƒ¼ãƒ³å†…ã«æœ‰ã—ã¦ãŠã‚Šã€ãã®ã‚µãƒ–
パターン自体ã®ç„¡åˆ¶é™ã®å復ãŒå¯èƒ½ãªå ´åˆã€ä¸€åº¦é™ã‚Šã®ã‚µãƒ–パターンã®
使用ãŒãƒžãƒƒãƒã«éžå¸¸ã«é•·ã„時間ã‹ã‹ã‚Šå¤±æ•—ã™ã‚‹ã“ã¨ã‚’回é¿ã™ã‚‹ãŸã‚ã®å”¯
ä¸€ã®æ‰‹æ®µã§ã™ã€‚
パターン
(\D+|<\d+>)*[!?]
ã¯ã€ç„¡åˆ¶é™ã®æ•°ã®å‰¯æ–‡å—列ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ãã®å‰¯æ–‡å—列ã¯éžæ•°å€¤ã‹ã‚‰
ãªã‚‹ã‹<>ã§æ‹¬ã‚‰ã‚ŒãŸæ•°å€¤ã®ã©ã¡ã‚‰ã‹ã§ã€å¾Œã« ! ã¾ãŸã¯ ? ãŒç¶šãã‚‚ã®ã§
ã™ã€‚マッãƒã—ãŸå ´åˆã€å®Ÿè¡Œã¯é«˜é€Ÿã§ã™ã€‚ã—ã‹ã—ã€ä»¥ä¸‹ã®æ–‡å—列ã«é©ç”¨ã—
ãŸå ´åˆã€
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
エラーを出力ã™ã‚‹ã¾ã§ã«é•·ã„時間をè¦ã—ã¾ã™ã€‚ã“れã¯ã€äºŒã¤ã®åå¾©ã«æ–‡
å—列を分割ã™ã‚‹é¸æŠžè‚¢ãŒå¤šãã€å…¨ã¦è©¦ã¿ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚(ã“ã®ä¾‹
ã§ã¯ã€çµ‚端ã«å˜ä¸€ã®æ–‡å—ã§ã¯ãªã[!?]を使用ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€PCRE
ã¨Perlã¯å…±ã«å˜ä¸€ã®æ–‡å—を使用ã—ãŸå ´åˆã«ã‚ˆã‚Šæ—©ã失敗ã¨åˆ¤å®šã™ã‚‹ã‚ˆã†
ã«æœ€é©åŒ–ã™ã‚‹ãŸã‚ã§ã™ã€‚マッãƒã«å¿…è¦ãªæœ€å¾Œã®ä¸€æ–‡å—ã‚’ã“れらã¯è¨˜æ†¶ã—
ã¦ãŠã‚Šã€æ–‡å—列ã«ã“れãŒãªã„å ´åˆã«æ—©æœŸã«å¤±æ•—ã¨åˆ¤å®šã—ã¾ã™ã€‚)
ã“ã®ãƒ‘ターンを次ã®ã‚ˆã†ã«å¤‰æ›´ã—ãŸå ´åˆã€
((?>\D+)|<\d+>)*[!?]
æ•°å—以外ã®ä¸¦ã³ã«ã‚ˆã‚Šä¸å‚™ã‚’生ã˜ã‚‹ã“ã¨ãŒãªããªã‚Šã€å¤±æ•—ã¯æ—©æœŸã«ç”Ÿã˜
ã¾ã™ã€‚
æ¡ä»¶ä»˜ãサブパターン
言明ã®çµæžœã¾ãŸã¯å‰ã®å€¤ã‚’å–å¾—ã™ã‚‹ã‚µãƒ–パターンãŒãƒžãƒƒãƒã—ãŸã‹ã©
ã†ã‹ã«ã‚ˆã‚Šã€ã‚µãƒ–パターンã®ãƒžãƒƒãƒå‡¦ç†ã‚’行ã£ãŸã‚Šã€ã‚µãƒ–パターンã®
2ã¤ã®é¸æŠžè‚¢ã‚’é¸æŠžã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚æ¡ä»¶ä»˜ãサブパター
ンã«ã¯2ã¤ã®å½¢å¼ãŒã‚りã¾ã™ã€‚
(?(condition)yes-pattern)
(?(condition)yes-pattern|no-pattern)
æ¡ä»¶ãŒæº€ãŸã•れãŸå ´åˆã€yes-pattern ãŒä½¿ç”¨ã•れã¾ã™ã€‚ãã†ã§ãªã„
å ´åˆã¯ã€(指定ã•れãŸå ´åˆã¯) no-pattern ãŒä½¿ç”¨ã•れã¾ã™ã€‚サブパ
ターンã«2ã¤ä»¥ä¸Šã®é¸æŠžè‚¢ãŒã‚ã‚‹å ´åˆã€ã‚³ãƒ³ãƒ‘イル時ã«ã‚¨ãƒ©ãƒ¼ã«ãªã‚Š
ã¾ã™ã€‚
2ç¨®é¡žã®æ¡ä»¶ãŒã‚りã¾ã™ã€‚括弧ã®é–“ã®ãƒ†ã‚ã‚¹ãƒˆãŒæ•°å—ã®ä¸¦ã³ã‹ã‚‰ãªã‚‹
å ´åˆã€æ¡ä»¶ã¯ã€ãã®ç•ªå·ã®å€¤ã‚’å–å¾—ã—ãŸã‚µãƒ–パターンãŒå‰ã«ãƒžãƒƒãƒ
ã—ã¦ã„ã‚‹å ´åˆã«æº€ãŸã•れã¾ã™ã€‚次ã®ãƒ‘ターンを見ã¦ã¿ã¾ã—ょã†ã€‚
å¯èªæ€§ã‚’高ã‚ã‚‹ãŸã‚ã«æ„味ã®ãªã„空白を挿入ã—(PCRE_EXTENDED
ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæŒ‡å®šã•れãŸã¨ä»®å®šã—ã¾ã™)ã€èª¬æ˜Žã‚’ç°¡å˜ã«ã™ã‚‹ãŸã‚
3ã¤ã®éƒ¨åˆ†ã«åˆ†å‰²ã—ã¦ã„ã¾ã™ã€‚
( \( )? [^()]+ (?(1) \) )
最åˆã®éƒ¨åˆ†ã¯ã€ã‚ªãƒ—ションã®å·¦æ‹¬å¼§ã«ãƒžãƒƒãƒã—ã€ãã®æ–‡å—ãŒã‚ã‚‹å ´
åˆã«ã€æœ€åˆã®éƒ¨åˆ†æ–‡å—列ã¨ã—ã¦è¨å®šã—ã¾ã™ã€‚第2ã®éƒ¨åˆ†ã¯ã€æ‹¬å¼§ä»¥å¤–
ã®ä¸€ã¤ä»¥ä¸Šã®æ–‡å—ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚第3ã®éƒ¨åˆ†ã¯ã€æœ€åˆã®æ‹¬å¼§ã«ãƒžãƒƒ
ãƒã—ãŸã‹ã©ã†ã‹ã‚’調ã¹ã‚‹æ¡ä»¶ä»˜ãサブパターンã§ã™ã€‚マッãƒã—ã¦ã„ã‚‹
å ´åˆã€ã¤ã¾ã‚Šã€å¯¾è±¡ãŒå·¦æ‹¬å¼§ã§å§‹ã¾ã£ã¦ã„ã‚‹å ´åˆã€æ¡ä»¶ã¯TRUEã¨
ãªã‚Šã€yes-pattern ãŒå®Ÿè¡Œã•れã€å³æ‹¬å¼§ãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚
ãã†ã§ãªã„å ´åˆã€no-pattern ãŒå˜åœ¨ã—ãªã„ãŸã‚ã€ã‚µãƒ–パターンã¯
何ã«ã‚‚マッãƒã—ã¾ã›ã‚“。言ã„ã‹ãˆã‚‹ã¨ã€ã“ã®ãƒ‘ターンã¯ã€æ‹¬å¼§ãªã—
ã®ä¸¦ã³ã«ãƒžãƒƒãƒã—ã€ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æ‹¬å¼§ã§å›²ã¾ã‚ŒãŸä¸¦ã³ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
æ¡ä»¶ãŒæ•°å—ã®ä¸¦ã³ã®å ´åˆã€è¨€æ˜Žã¨ãªã‚Šã¾ã™ã€‚肯定ã‚ã‚‹ã„ã¯å¦å®šã®
剿–¹ã¾ãŸã¯å¾Œæ–¹è¨€æ˜Žã¨ãªã‚Šã¾ã™ã€‚次ã®ãƒ‘ターンを見ã¦ã¿ã¾ã—ょã†ã€‚
ã“ã®ãƒ‘ターンã«ã‚‚æ„味ã®ãªã„パターンを挿入ã—ã€2ã¤ã®é¸æŠžè‚¢ã‚’2行
ç›®ã«ç½®ã„ã¦ã„ã¾ã™ã€‚
(?(?=[^a-z]*[a-z])
\d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )
æ¡ä»¶ã¯ã€è‚¯å®šå¾Œæ–¹è¨€æ˜Žã§ã‚りã€è‹±å—ä»¥å¤–ã®æ–‡å—ã®ä¸¦ã³ã‹ãã®å¾Œã«
英å—ãŒç¶šãã‚‚ã®ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚言ã„ã‹ãˆã‚‹ã¨ã€å¯¾è±¡æ–‡å—列ã«å°‘ãª
ãã¨ã‚‚æ–‡å—ãŒä¸€ã¤ã‚ã‚‹ã‹ã©ã†ã‹ã‚’調ã¹ã¾ã™ã€‚æ–‡å—ãŒã¿ã¤ã‹ã‚‹ã¨ã€
æ¤œç´¢å¯¾è±¡ã¯æœ€åˆã®é¸æŠžè‚¢ã«å¯¾ã—ã¦ãƒžãƒƒãƒã—ã¾ã™ã€‚ã¿ã¤ã‹ã‚‰ãªã„å ´åˆ
ã¯ã€2番目ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ã“ã®ãƒ‘ターンã¯ã€2ã¤ã®å½¢å¼ dd-aaa-dd
ã¾ãŸã¯ dd-dd-dd ã®ã©ã¡ã‚‰ã‹ã®æ–‡å—列ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ãŸã ã—ã€
aaa ã¯è‹±å—ã€dd ã¯æ•°å—ã§ã™ã€‚
コメント
(?# ã¨ã„ã†ä¸¦ã³ã¯ã€é–‹å§‹ã‚’指定ã—ã¾ã™ã€‚コメントã¯ã€æ¬¡ã®å³æ‹¬å¼§ã¾ã§
ç¶šãã¾ã™ã€‚括弧ã®ãƒã‚¹ãƒˆã¯è¨±å¯ã•れã¾ã›ã‚“。コメントä¸ã®æ–‡å—ã¯ã€
パターンマッãƒãƒ³ã‚°ã«ã¯å…¨ã関係ã—ã¾ã›ã‚“。
PCRE_EXTENDED オプションãŒè¨å®šã•れã¦ã„ã‚‹å ´åˆã€æ–‡å—クラスã®å¤–
ã«ã‚るエスケープã•れã¦ã„ãªã„ # æ–‡å—ã¯ã€ã‚³ãƒ¡ãƒ³ãƒˆã‚’指定ã—ã¾ã™ã€‚
コメントã¯ã€ãƒ‘ターンä¸ã®æ¬¡ã®æ”¹è¡Œæ–‡å—ã¾ã§ç¶šãã¾ã™ã€‚
å†å¸°çš„パターン
無制é™ã®ãƒã‚¹ãƒˆã‚’許容ã™ã‚‹æ‹¬å¼§ã‚’å«ã‚€æ–‡å—列ã«ãƒžãƒƒãƒã‚’行ã†å•題を考ãˆ
ã¦ã¿ã¾ã—ょã†ã€‚å†å¸°ã‚’使用ã—ãªã„å ´åˆã€å®Ÿç¾å¯èƒ½ãªæœ€è‰¯ã®æ–¹æ³•ã¯ã€ä½•ら
ã‹ã®å›ºå®šã—ãŸæ·±ã•ã®ãƒã‚¹ãƒˆã¾ã§ãƒžãƒƒãƒã‚’行ã†ãƒ‘ターンを使用ã™ã‚‹ã“ã¨ã§
ã™ã€‚ã“れã§ã¯ã€ä»»æ„ã®æ·±ã•ã®ãƒã‚¹ãƒˆã‚’処ç†ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。Perl
5.6ã§ã¯ã€(ä»–ã®æ©Ÿèƒ½ã¨å…±ã«)æ£è¦è¡¨ç¾ã§å†å¸°ã‚’行ã†ã“ã¨ã‚’å¯èƒ½ã«ã™ã‚‹å®Ÿé¨“
çš„ãªæ©Ÿèƒ½ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚専用ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ (?R)ãŒå†å¸°ã‚’指定
ã™ã‚‹ãŸã‚ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚ã“ã®PCREパターンã«ã‚ˆã‚Šã“ã®æ‹¬å¼§ã®
å•é¡Œã¯æ¬¡ã®ã‚ˆã†ã«è§£æ±ºã•れã¾ã™ã€‚(空白を無視ã™ã‚‹ãŸã‚ã«PCRE_EXTENDEDオプション
ãŒè¨å®šã•れã¦ã„ã‚‹ã¨ä»®å®šã—ã¾ã™)
\( ( (?>[^()]+) | (?R) )* \)
ã¾ãšã€ã“ã®ãƒ‘ターンã¯é–‹ã括弧ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ç¶šã„ã¦ã€æ‹¬å¼§ä»¥å¤–ã®ä¸¦
ã³ã¾ãŸã¯ãƒ‘ターン自体ã«å†å¸°çš„ã«ãƒžãƒƒãƒã™ã‚‹éƒ¨åˆ†æ–‡å—列ã«ä½•回ã§ã‚‚マッ
ãƒã—ã¾ã™ã€‚最後ã«é–‰ã˜æ‹¬å¼§ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
ã“ã®ãƒ‘ターン例ã«ã¯ã€ãƒã‚¹ãƒˆã—ãŸç„¡åˆ¶é™ã®å復ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ã“ã®ãŸ
ã‚ã€ãƒžãƒƒãƒã—ãªã„æ–‡å—列ã®ãƒ‘ターンをé©ç”¨ã™ã‚‹éš›ã«æ‹¬å¼§ä»¥å¤–ã®æ–‡å—列ã«
一回ã ã‘マッãƒã™ã‚‹ã‚µãƒ–パターンを使用ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚例ãˆã°ã€
ã“ã®ãƒ‘ã‚¿ãƒ¼ãƒ³ã‚’æ¬¡ã®æ–‡å—列ã«é©ç”¨ã—ãŸå ´åˆã€
(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
"マッãƒã—ãªã„"ã¨ã„ã†åˆ¤å®šãŒé€Ÿã‚„ã‹ã«è¡Œã‚れã¾ã™ã€‚ã—ã‹ã—ã€ä¸€å›žé™ã‚Šã®
サブパターンを使用ã—ãªã„å ´åˆã€å¯¾è±¡æ–‡å—列を分割å¯èƒ½ãª + 㨠* ã®å
復ã®ç¨®é¡žãŒéžå¸¸ã«å¤šãã€å¤±æ•—を出力ã™ã‚‹å‰ã«å…¨ã¦ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚ã‚‹
ãŸã‚ã€ãƒžãƒƒãƒã«éžå¸¸ã«æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€‚
値をå–å¾—ã™ã‚‹ã‚µãƒ–パターンã«è¨å®šã•れる値ã¯ã€ã‚µãƒ–パターンã®å€¤ãŒè¨å®š
ã•れる最も外å´ã®å†å¸°ã®ãƒ¬ãƒ™ãƒ«ã‹ã‚‰ã®ã‚‚ã®ã§ã™ã€‚上記ã®ãƒ‘ターンを以下
ã«ãƒžãƒƒãƒã•ã›ã‚‹å ´åˆã€
(ab(cd)ef)
値をå–å¾—ã™ã‚‹æ‹¬å¼§ã®å€¤ã¯"ef"ã§ã‚ã‚Šã€æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®æœ€å¾Œã®å€¤ã§ã™ã€‚
次ã®ã‚ˆã†ã«æ‹¬å¼§ã‚’è¿½åŠ ã™ã‚‹ã¨ã€
\( ( ( (?>[^()]+) | (?R) )* ) \)
å–å¾—ã•れる文å—列ã¯ã€"ab(cd)ef" ã¨
ãªã‚Šã€æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®æ‹¬å¼§ã®ä¸èº«ã¨ãªã‚Šã¾ã™ã€‚一ã¤ã®ãƒ‘ターン内ã«
15以上ã®å–得用括弧ãŒã‚ã‚‹å ´åˆã€PCREã¯å†å¸°ã®é–“ã®ãƒ‡ãƒ¼ã‚¿ä¿å˜ç”¨ã«
è¿½åŠ ã®ãƒ¡ãƒ¢ãƒªã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€pcre_malloc ã«
より確ä¿ã•れã€å¾Œã§ pcre_free ã«ã‚ˆã‚Šé–‹æ”¾ã•れã¾ã™ã€‚メモリãŒå–
å¾—ã§ããªã„å ´åˆã€ãƒ¡ãƒ¢ãƒªä¸è¶³ã‚¨ãƒ©ãƒ¼ã‚’å†å¸°ã®å†…å´ã‹ã‚‰å‡ºåŠ›ã™ã‚‹æ‰‹æ®µ
ã¯ãªã„ãŸã‚ã€æœ€åˆã®15個ã®å–得用括弧ã«ã¤ã„ã¦ã®ã¿ãƒ‡ãƒ¼ã‚¿ãŒä¿å˜ã•
れã¾ã™ã€‚
性能
パターンã®å¹¾ã¤ã‹ã®è¦ç´ ã¯ã€ä»–ã®è¦ç´ よりもより効率的ã§ã™ã€‚
(a|e|i|o|u) ã®ã‚ˆã†ãªé¸æŠžè‚¢ã®é›†åˆã‚ˆã‚Šã‚‚ [aeiou] ã®ã‚ˆã†ãªæ–‡å—ク
ãƒ©ã‚¹ã®æ–¹ãŒã‚ˆã‚ŠåŠ¹çŽ‡çš„ã§ã™ã€‚一般ã«ã€æ§‹æˆãŒæœ€ã‚‚ç°¡å˜ãªã‚‚ã®ãŒ
ãŸã„ã¦ã„最も効率ãŒè‰¯ã„ã§ã™ã€‚Jeffrey Friedl ã®æœ¬ã«ã¯ã€
性能å‘上ã®ãŸã‚ã«æ£è¦è¡¨ç¾ã®æœ€é©åŒ–ã«é–¢ã™ã‚‹å¤šãã®è°è«–ãŒ
記述ã•れã¦ã„ã¾ã™ã€‚
パターン㌠.* ã§å§‹ã¾ã‚Šã€PCRE_DOTALLオプションãŒè¨
定ã•れã¦ã„ã‚‹å ´åˆã€å¯¾è±¡æ–‡å—列ã®å§‹ç«¯ã§ã—ã‹ã¾ã£ã¡ã§ããªã„ãŸã‚ã€ãƒ‘ター
ンã¯PCREã«ã‚ˆã‚Šæš—é»™ã®ã†ã¡ã«ã‚¢ãƒ³ã‚«ãƒ¼ä»˜ãã¨ãªã‚Šã¾ã™ã€‚
ã—ã‹ã—ã€PCRE_DOTALL
ãŒè¨å®šã•れã¦ã„ãªã„å ´åˆã€ãƒ¡ã‚¿æ–‡å— . ãŒæ”¹è¡Œã«ãƒžãƒƒãƒã—ãªã„ã®ã§ã€PCRE
ã¯ã“ã®æœ€é©åŒ–を行ãˆã¾ã›ã‚“。
対象文å—åˆ—ãŒæ”¹è¡Œã‚’å«ã‚€å ´åˆã€ãƒ‘ã‚¿ãƒ¼ãƒ³ã¯æ–‡å—列ã®å§‹ç«¯ã‹ã‚‰ã§ã¯ãªã
儿”¹è¡Œã®ç›´å¾Œã®æ–‡å—ã‹ã‚‰ãƒžãƒƒãƒã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚例ãˆã°ã€
パターン
(.*) second
ã¯ã€å¯¾è±¡æ–‡å—列 "first\nand second" (ãŸã ã—ã€\n ã¯æ”¹è¡Œæ–‡å—ã‚’
æ„味ã—ã¾ã™) ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚
最åˆã«å€¤ã‚’å–å¾—ã•れる部分文å—列ã¯ã€"and" ã«ãªã‚Šã¾ã™ã€‚ã“れを動
作ã•ã›ã‚‹ã«ã¯ã€PCRE ã¯å¯¾è±¡æ–‡å—列ã®å„改行ã®å¾Œã‹ã‚‰ãƒžãƒƒãƒã‚’å†åº¦
é–‹å§‹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ã“ã®ã‚ˆã†ãªãƒ‘ターンを改行をå«ã¾ãªã„対象文å—列ã«ä½¿ç”¨ã—ãŸå ´åˆã€
PCRE_DOTALLã‚’è¨å®šã™
ã‚‹ã‹ã€ã‚¢ãƒ³ã‚«ãƒ¼ä»˜ãã§ã‚ã‚‹ã“ã¨ã‚’陽ã«ç¤ºã™ãŸã‚ã«ãƒ‘ターンを ^.* ã§é–‹å§‹
ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šæœ€é«˜ã®æ€§èƒ½ãŒå¾—られã¾ã™ã€‚
ã“れã«ã‚ˆã‚Šã€PCRE ãŒå¯¾è±¡æ–‡å—åˆ—ã®æ”¹è¡Œã‚’探ã—ã€ãã“ã§å†ã‚¹ã‚¿ãƒ¼ãƒˆ
ã™ã‚‹ã“ã¨ã‚’防æ¢ã—ã¾ã™ã€‚
ãƒã‚¹ãƒˆã—ãŸæœªç¢ºå®šã®å復を有ã™ã‚‹ãƒ‘ターンã«ã¯æ³¨æ„ã‚’è¦ã—ã¾ã™ã€‚
ã“ã®ãƒ‘ターンをマッãƒã—ãªã„æ–‡å—列ã«é©ç”¨ã—ãŸå ´åˆã«ã¯ã€å®Ÿè¡Œã«é•·ã„時
é–“ã‚’è¦ã—ã¾ã™ã€‚次ã®ãƒ‘ターンを考ãˆã¦ã¿ã¾ã—ょã†ã€‚
(a+)*
ã“れã¯ã€33通りã®ç•°ãªã£ãŸæ–¹æ³•ã§ã€"aaaa"ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ã“ã®æ•°ã¯ã€
æ–‡å—列ãŒé•·ããªã‚‹ã«ã¤ã‚Œã¦æ€¥æ¿€ã«å¢—大ã—ã¾ã™ã€‚(* å復ã¯ã€0ã€1ã€2ã€3ã€
4回マッãƒã—ã€0以外ã®å„々ã®ã‚±ãƒ¼ã‚¹ã§ã€+å復ã¯ç•°ãªã£ãŸå›žæ•°åˆ†ãƒžãƒƒãƒã—
ã¾ã™) ãƒ‘ã‚¿ãƒ¼ãƒ³ã®æ®‹ã‚Šã«ãƒžãƒƒãƒå…¨ä½“ãŒå¤±æ•—ã™ã‚‹ã‚ˆã†ãªãƒ‘ターンã§ã‚ã‚‹å ´
åˆã€PCREã¯åŸºæœ¬çš„ã«å…¨ã¦ã®å¯èƒ½æ€§ãŒã‚ã‚‹é¸æŠžè‚¢ã‚’èª¿ã¹ã‚‹ãŸã‚ã€éžå¸¸ã«é•·
ã„æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€‚
次ã®ã‚ˆã†ã«æ–‡å—リテラルãŒå¾Œã«ã‚るよã†ãªã‚ˆã‚Šç°¡å˜ãªå ´åˆã«ã¯æœ€é©åŒ–ãŒ
å¯èƒ½ã§ã™ã€‚
(a+)*b
標準ã®ãƒžãƒƒãƒæ‰‹é †ã«ç€æ‰‹ã™ã‚‹å‰ã«ã€PCREã¯å¯¾è±¡æ–‡å—列ã®å¾Œã®æ–¹ã«"b"ãŒã‚
ã‚‹ã‹ã©ã†ã‹ã‚’調ã¹ã¾ã™ã€‚ã“れãŒãªã„å ´åˆã«ã¯ã€ç›´ã¡ã«ãƒžãƒƒãƒã¯å¤±æ•—ã—ã¾
ã™ã€‚ã—ã‹ã—ã€ãƒªãƒ†ãƒ©ãƒ«ãŒå¾Œã«ãªã„å ´åˆã«ã¯ã€ã“ã®æœ€é©åŒ–を使用ã™ã‚‹ã“ã¨
ã¯ã§ãã¾ã›ã‚“。以下ã®ãƒ‘ターンã¨ä¸Šã®ãƒ‘ターンã®å‹•作ã®å·®ç•°ã‚’比較ã—ã¦
ã¿ã¾ã—ょã†ã€‚
(a+)*\d
å‰è€…ã¯ã€å…¨ä½“㌠"a" æ–‡å—ã§ã‚る行ã«é©ç”¨ã•れãŸå ´åˆã«ã»ã¼çž¬é–“çš„ã«å¤±æ•—
ã¨åˆ¤å®šã—ã¾ã™ã€‚一方ã€å¾Œè€…ã§ã¯ã€ãŠã‚ˆã20æ–‡å—ã‚ˆã‚Šé•·ã„æ–‡å—列ã§ã¯ã‹ãª
ã‚Šã®æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€‚