PHP: Perl互換の正規表現関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<recodeパターン修正子>
view the version of this page
Last updated: Tue, 21 Dec 2004

C. Perl互換の正規表現関数

導入

以下の関数で使用されるパターンに関する構文は、Perl に非常によく似て います。式は、デリミタ、例えばスラッシュ (/) で囲まれる必要があり ます。英数字またはバックスラッシュ(\)以外の全ての文字をデリミタと して使用可能です。デリミタ文字を正規表現本体において使用する必要が ある場合は、バックスラッシュでエスケープする必要があります。PHP 4.0.4以降、パターン指定用に Perl形式の (), {}, [], <> も 使用可能です。 詳細については パターン構文 を参照して下さい。

マッチングに影響を与える様々な修飾子を終端デリミタの後に付ける ことができます。 パターン修飾子 を参照下さい。

PHPは、POSIX拡張正規表現関数を用 いてPOSIX拡張構文を用いる正規表現もサポートしています。

警告

PCREのいくつかの制限についても知っておく必要があります。 詳細は、 を読んで下さい。

要件

正規表現は、Philip Hazelで書かれ、the University of Cambridge, Englandに著作権があるオープンソースソフトウエアのPCREライブラリパッ ケージでサポートされます。PCREは、で取得可能です。

インストール手順

PHP 4.2.0以降、以下の関数はデフォルトで有効となっています。 --without-pcre-regexでPCRE関数を無 効にすることができます。 付属のライブラリを使用しない場合、PCREのインクルードおよびライブラリ ファイルがある場所をDIRに指定するために --with-pcre-regex=DIRを使用して下 さい。これ以前のバージョンでは、この関数を使用する ために--with-pcre-regex[=DIR]を指 定してPHPをconfigureおよびコンパイルする必要があります。

Windows版のPHPには この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。

実行用の設定

この拡張モジュールは設定ディレクティブを全く定義しません。

リソース型

この拡張モジュールはリソース型を全く定義しません。

定義済みの定数

これらの定数は、この拡張モジュールで定義されており、 この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー ドされるかのどちらかの場合のみ使用可能です。

表 1. PREG定数

定数説明
PREG_PATTERN_ORDER $matches[0]は、パターンマッチした部分全部を含む配列、 $matches[1]は最初の括弧付きのサブパターンにマッチした文字列の配 列、といったように結果の順序を指定します。 このフラグは、preg_match_all()でのみ使用され ます。
PREG_SET_ORDER $matches[0]は最初の括弧付きのサブパターンにマッチした文字列の 配列、$matches[1]は2番目の括弧付きのサブパターンにマッチした文字 列の配列、といったように結果の順序を指定します。 このフラグは、preg_match_all()でのみ使用され ます。
PREG_OFFSET_CAPTURE PREG_SPLIT_OFFSET_CAPTUREの説明を参照して下 さい。このフラグは、PHP 4.3.0以降で利用可能で す。
PREG_SPLIT_NO_EMPTY このフラグは、preg_split()が空でない部分のみ を返すようにします。
PREG_SPLIT_DELIM_CAPTURE このフラグは、preg_split()が デリミタパターン内の括弧付きの式もキャプチャするようにします。 このフラグは、PHP 4.0.5以降で利用可能です。
PREG_SPLIT_OFFSET_CAPTURE このフラグが設定された場合、マッチする度に付随する文字列オフセッ トも返されます。これは、配列を返す返り値が、各要素がオフセット0 にマッチした文字列、その文字列オフセットがオフセット1に含まれる ような配列に変更されることになるので注意して下さい。 このフラグは、PHP 4.3.0以降で利用可能で、 preg_split()のみで使用されます。

例 1. 有効なパターンの例

  • /<\/\w+>/

  • |(\d{3})-\d+|Sm

  • /^(?i)php[34]/

  • {^\s+(\s+)?$}

例 2. 無効なパターンの例

  • /href='(.*)' - 終端デリミタが抜けている

  • /\w+\s*\w+/J - 未知の修飾子 'J'

  • 1-\d3-\d3-\d4| - 始端デリミタが抜けている

目次
パターン修正子 -- 正規表現パターンで使用可能な修飾子を得る
パターン構文 -- PCRE 正規表現の説明
preg_grep --  パターンにマッチする配列の要素を返す
preg_match_all -- グローバル正規表現検索を行う
preg_match -- 正規表現検索を行う
preg_quote -- 正規表現文字をクオートする
preg_replace_callback --  正規表現検索を行い、コールバック関数を使用して置換を行う
preg_replace -- 正規表現検索および置換を行う
preg_split -- 正規表現で文字列を分割する


add a note add a note User Contributed Notes
Perl互換の正規表現関数
Ned Baldessin
24-Oct-2004 01:08
If you want to perform regular expressions on Unicode strings, the PCRE functions will NOT be of any help. You need to use the Multibyte extension : mb_ereg(), mb_eregi(), pb_ereg_replace() and so on. When doing so, be carefull to set the default text encoding to the same encoding used by the text you are searching and replacing in. You can do that with the mb_regex_encoding() function. You will probably also want to set the default encoding for the other mb_* string functions with mb_internal_encoding().

So when dealing with, say, french text, I start with these :
<?php
mb_internal_encoding
('UTF-8');
mb_regex_encoding('UTF-8');
setlocale(LC_ALL, 'fr-fr');
?>
steve at stevedix dot de
20-Jul-2004 12:17
Something to bear in mind is that regex is actually a declarative programming language like prolog : your regex is a set of rules which the regex interpreter tries to match against a string.  During this matching, the interpreter will assume certain things, and continue assuming them until it comes up against a failure to match, which then causes it to backtrack.  Regex assumes "greedy matching" unless explicitly told not to, which can cause a lot of backtracking.  A general rule of thumb is that the more backtracking, the slower the matching process.

It is therefore vital, if you are trying to optimise your program to run quickly (and if you can't do without regex), to optimise your regexes to match quickly.

I recommend the use of a tool such as "The Regex Coach" to debug your regex strings.

(Windows installer) (Linux tar archive)
ivan dot roth at free dot fr
12-May-2004 11:12
I think the adress for the simple PCRE tutorial is now

And I approve, it is  good one! :)
Snobord787 at msn dot com
14-Jan-2004 02:51

Best site I have ever seen uses images to help you
Biju
21-Sep-2003 04:00
Regular Expressions Tutorial from non PHP sites
  
  
  
  
  
  
  
  
  
  
  
hrz at geodata dot soton dot ac dot uk
06-Mar-2002 07:33
If you're venturing into new regular expression territory with a lack of useful examples then it would pay to get familiar with this page:


<recodeパターン修正子>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page