2016-09-21 12 views
1

正規表現で以下の行をチェックするには?PHPで正規表現が機能しない

[= '41' album_idアルバム]

すべては私のalbum_id除い静的です。これは41またはそれ以外の場合があります。私のコードの下

私が試してみましたが、その一つが動作していない:

$str = "[albums album_id='41']"; 
$regex = '/^[albums album_id=\'[0-9]\']$/'; 
if (preg_match($regex, $str)) { 
    echo $str . " is a valid album ID."; 
} else { 
    echo $str . " is an invalid ablum ID. Please try again."; 
} 

は、あなたが最初に[を脱出し、[0-9]+数量詞を追加する必要があなたに

答えて

4

ありがとうございます。最初の[はエスケープされていないので、文字クラス - [albums album_id=\'[0-9]が作成されました。これはあなたが期待していなかったものです。

は使用

$regex = '/^\[albums album_id=\'[0-9]+\']$/'; 

パターンは詳細:

  • ^ - 文字列の先頭
  • \[ - リテラル[
  • albums album_id=\' - 文字列リテラルalbums album_id='
  • [0-9]+ - 一つ以上の桁(+数量詞のおかげで、*数量詞を使用し、ここでは何の数字は存在しないことができる場合)
  • \'] - 文字列リテラル']
  • $ - 文字列の末尾。

PHP demo参照:

$str = "[albums album_id='41']"; 
$regex = '/^\[albums album_id=\'[0-9]+\']$/'; 
if (preg_match($regex, $str)) { 
    echo $str . " is a valid album ID."; 
} else { 
    echo $str . " is an invalid ablum ID. Please try again."; 
} 
// => [albums album_id='41'] is a valid album ID. 
+2

FYI:私の答えで言及しましたが、ここで追加します:IDが空の場合は、$ regex = '/^\ [albums album_id = \' [0-9] * \ '] $ /'; 'これは言及されていません:数字を抽出する必要がある場合、そのパターンの周りにカッコを入れてください:$ regex = '/^\ [albums album_id = \'([0-9] *)\ '] $/; 'preg_match' - ' preg_match($ regex、$ str、$ matches) 'で3番目の引数を使うと、値は' $ matches [1] 'になります。 [このPHPデモ](https://ideone.com/mvUK4s)を参照してください。 –

+1

素敵な返​​事をありがとう。 – Chinmay235

2

あなたの正規表現コードのエラーを持って、これを使用:

$regex = '/^[albums album_id=\'[0-9]+\']$/' 

+ [0-9]あなたがする必要があることを伝えることです後0から9までの数字を1つ以上持ちます(0以上の数字を入力する場合は*を使用できます)

コードで使用する前に正規表現をテストするには、このWebサイトではregex101

関連する問題