PHP用にPOSIXをPCREに変換するユーティリティはありますか? [複製]
質問
この質問にはすでに回答があります:
POSIXをPHPのPCREに変換するユーティリティはありますか? PCREのPHPマニュアルに多少混乱しているため、PCREの詳細情報を見つけようとしていますが、そのようなユーティリティを設計した人がいるかどうか疑問に思いました。
または、もし誰かが以下を変換する方法を説明するなら、それもまた大丈夫でしょう:
ereg("^#[01-9A-F]{6}<*>quot;, $sColor)
しかし、変換を教えてくれるだけでなく、それがどのように行われたか説明してください。
解決
preg_match("/^#[01-9A-F]{6}$/", $sColor)
この場合、2つの区切り文字を追加するだけです。
perlでは、次のように記述できます
if ( s =~ /x.+y/ )
{ print "match"; }
ご覧のとおり、実際の正規表現は//でカプセル化されています。正規表現にオプションを設定する場合は、2番目の/の後に置きます。デフォルトで式を欲張らないように切り替える/x.+y/U
pcreはこの動作をエミュレートします。関数を呼び出す必要がありますが、区切り文字を指定し、2番目の区切り文字の後にオプションを設定する必要もあります。 perlでは、区切り文字は/である必要があります。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)
表現内に表示されない文字を選択するのが最善です。
他のヒント
preg_match(&quot; / ^#[01-9A-F] {6} $ / D&quot ;, $ sColor)
D
修飾子。人々はいつもそれを忘れています。それなしでは、 $
は最終的な改行文字を許可します。 &quot;#000000 \ n&quot;のような文字列合格します。これはPOSIXとPCREの微妙な違いです。
そしてもちろん、 [01-9]
は [0-9]
に書き換えることができます。
ところで、PHPはPCREとPOSIXの両方の正規表現をサポートしています。以下は、POSIX正規表現に関するPHPマニュアルのセクションです。したがって、これらを変換する必要はありません。 http://www.php.net/manual/en/book.regex.php
所属していません StackOverflow