2016-09-21 24 views
1

如何在正則表達式中檢查以下行?正則表達式不能在PHP中工作

[相冊album_id = '41' ]

所有的都是靜態的,除了我的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."; 
} 

謝謝

回答

4

你需要躲避第一[,並添加+量詞來[0-9]。第一個[被非轉義創建了一個角色類 - [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

供參考:雖然我在我的回答中提到它,但我會在這裏添加:如果ID可以爲空,請使用'$ regex ='/^\ [[albums album_id ='[0-9] * \ '] $ /';'。這裏沒有提到:如果你需要提取數字,那麼在模式中加上括號:'$ regex ='/^\ [albums album_id = \'([0-9] *)\'] $ /' ;'在preg_match中使用第三個參數 - preg_match($ regex,$ str,$ matches)',這個值將在'$ matches [1]'中。看[這個PHP演示](https://ideone.com/mvUK4s)。 –

+1

謝謝你的回答。 – Chinmay235

2

你在你的正則表達式代碼中的錯誤,使用:

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

的+後[0-9]就是告訴你需要有一個或多個0到9之間的數字(如果你想要零或更多,你可以放*)

要在你的代碼中使用它之前測試你的正則表達式,你可以工作與此網站regex101