2009-06-17 19 views
1

私は文字列を持っており、次の "_archived"が含まれているかどうかを確認する必要があります。シンプルな正規表現

私は、次を使用していた。

preg_match('(.*)_archived$',$string); 

が、取得:

Warning: preg_match() [function.preg-match]: Unknown modifier '_' in /home/storrec/classes/class.main.php on line 70 

私は正規表現に新しいですので、これはおそらく非常に簡単です。

または私は例えば、あなただけのいくつかの区切り文字を必要とし、事前

答えて

5

を使用してみてくださいはstrstrは、この場合には十分ですが、あなたの問題を解決するために、あなたはあなたの正規表現に区切り文字を追加する必要があります。区切り文字は次のように、正規表現を開始し、終了の特殊文字であるので:

preg_match('/_archived/',$string); 

区切り文字は異なる文字をたくさんすることができますが、通常の選択肢は、/#で、!。 PHPマニュアルから:

英数字、バックスラッシュ()、またはヌルバイトでない限り、任意の文字をデリミタとして使用できます。デリミタ文字を式自体で使用する必要がある場合は、バックスラッシュでエスケープする必要があります。 PHP 4.0.4以降、Perl-style()、{}、[]、および<>の区切り文字を使用することもできます。

PHP正規表現の構文hereをすべて読んでください。

PHP manual hereに有効なパターン(無効なパターン)がいくつか表示されます。

+0

感謝私はstrstrをreg exとして使用するだろう。 – Lizard

+0

ああ、絶対に。Regexは、使用できる場所があります.Zend Frameworkでは、他のメソッドにマップされる「魔法のメソッド」を作成するためによく使われますが、 PHPの__call($ functionName、$ args)関数をオーバーライドし、関数名の関連部分をマッチさせ、それらを実際のメソッドにマップするためにregexを使います。 .e。findXByY()=> find( 'X'、 'Y') – PatrikAkerstrand

1

strstr($string, "_archived"); 

おかげのような多くのシンプルなものを使用する必要があります/

preg_match('/_archived$/',$string); 

でパターンを囲むPerlの正規表現は、あなたの正規表現がたくさん/使用している場合に便利である任意の区切り文字を、使用してみましょう。

preg_match('{_archived$}',$string); 

また、あなたが「_archived」の前にビットをキャプチャしていないとして、あなたが少し必要としないことに注意して、あなただけにテストしている(*)を:私は、多くの場合、自分が例えば括弧を使用して検索します文字列は$文字列に存在する場合にのみチェックされている場合、はstrstrがあるべき

preg_match('/(.*)_archived$/',$string); 

:文字列はそれで終わるかどうかを確認し(最後にその$記号は文字列の末尾にマッチする)

0

てみてくださいあなたには十分です。

0

strstr()またはstrpos()はこのようなものを見つけるのに適していると思います。取得しているエラーは、正規表現のまわりに区切り文字がないためです。

"/(.*)_archived$/" 

または

"#(.*)_archived$#". 
7

strstr($ string、 "_archived");

あなたが説明している問題の方が簡単になるでしょう。

しばしば

一部の人々は、問題に直面したとき、考えて引用されているように

「私は正規表現を使用します、私は知っています。」今、彼らには2つの問題があります。 - Jamie Zawinski

+0

+1 – schnaader

1

文字列に文字列が含まれている場合は、是非単純なバージョンを使用してください。しかし、あなたは、単に行うことができます。

preg_match('/_archived/', $string); 
0

が...おそらくこれを実装するための最良の方法です。あなたは正規表現が過度であることは間違いありません。

0

あなたが探している特定の文字列を持っているときに、正規表現を少しでも過剰に使ってください。 PHPの標準的な文字列検索関数の1つを使用すれば問題ありません。

strstr関数は動作しますが、従来のPHP Wisdom(read:myth、legend、superstition、the manual)は、strpos関数を使用するとパフォーマンスが向上すると言います。すなわち、

if(strpos($string, '_archived') !== false) { 
} 
あなたがここに真の不平等演算子を使用したいと思う

のようなもの、それはそれの干し草の山の開始時に針が見つかったときに「0」を返しますstrposとして。詳細は、the manualを参照してください。

PHPの正規表現エンジンでは、正規表現の文字列を区切り文字で囲むことを想定しています。区切り文字のセットは、さまざまな文字( "/"または "|" 「{」または「#」、または...)。PHPエンジンはで、あなたがそう

_archived$ 

あるパターン修飾子のセットを持つ

.* 

の正規表現をしたいと考えて将来、正規表現を使用するときは、

のようなものを試してみてください
//equivilant 
preg_match('/(.*)_archived$/i',$string); 
preg_match('{(.*)_archived$}i',$string); 
preg_match('#(.*)_archived$#i',$string); 

"/"、 "#"、 "{}"は区切り文字です。彼らはマッチで使用されていない、彼らはエンジンに伝えるために使用される "これらの文字の間のものは私のreg exです。最後の" i "は、大文字と小文字を区別しないと言うパターン修飾子です。しかし、私はここにそれを入れて、パターン修飾子がどのように見えるかを見て、最初にデリミタが必要な理由を理解するのを助ける。

関連する問題