2009-06-21 19 views
6

POSIXをPHP用のPCREに変換するユーティリティはありますか?私は、PCREのPHPマニュアルに多少混乱しています.PCREの詳細を調べようとしていますが、誰かがこのようなユーティリティを設計したのかどうか疑問に思っていました。POSIXをPHP用PCREに変換するユーティリティはありますか?

それとも、誰も大丈夫だと思うことは、次の手順を変換する方法を説明するだろうとします

ereg("^#[01-9A-F]{6}$", $sColor) 

しかし、ちょうど私の変換を教えて、どのように行うのではない説明してください。

+1

興味深いのは、01-9と書くのはなぜですか? – VolkerK

答えて

6

preg_match("/^#[01-9A-F]{6}$/", $sColor)
この場合、2つの区切り文字を追加するだけです。

のように書くことができます。

if (s =~ /x.+y/) { print "match"; }
のように書くことができます。ご覧のとおり、実際の正規表現は//にカプセル化されています。正規表現にオプションを設定したい場合は、2番目の/の後に置く。式をungreedyにデフォルトで切り替える/x.+y/U
pcreがこの動作をエミュレートするようになりました。関数を呼び出す必要がありますが、区切り文字を指定し、2番目の区切り文字の後にオプションを設定する必要もあります。区切り文字は/でなければなりません。pcreでは、pcreと同じように自由に
preg_match("/^#[01-9A-F]{6}$/", $sColor) 
preg_match("!^#[01-9A-F]{6}$!", $sColor) 
preg_match("#^\#[01-9A-F]{6}$#", $sColor) // need to escape the # within the expression here 
preg_match("^#[01-9A-F]{6}$", $sColor)
を選択できます。これは、式の中に現れない文字を選択するのに最適です。

-1

ところで、PHPはPCREとPOSIX正規表現の両方をサポートしています。ここでは、POSIX正規表現のPHPマニュアルのセクションですので、変換する必要はありません。http://www.php.net/manual/en/book.regex.php

+2

私はこれについて知っています。しかし、POSIXはPHP 5.3では廃止予定ですので、私はすべてを最新の状態に保つことを目指していました。 – waiwai933

+0

この回答は古いです、あなたはそれを更新できますか? 'ereg()'は廃止されました – HamZa

4

preg_match("/^#[01-9A-F]{6}$/D", $sColor)

D modifierに注意してください。人々は常にそれを忘れています。それがなければ、$は最終改行文字を許可します。 "#000000 \ n"のような文字列が渡されます。これはPOSIXとPCREの微妙な違いです。

[01-9]は、[0-9]に書き換えることができます。

関連する問題