2013-01-15 136 views
1

我有一個問題,我需要返回一個固定的子字符串後存在的數字值,而不管字符串周圍的其他字符。我在那裏,因爲下面的作品。PHP preg_match在子字符串後返回字符串中的值

$string = "Created Ticket_Id#234 (Some info)"; 
preg_match("/Ticket Id_#([0-9]+\s)/", $string, $res); 
print $res[1]; 

Outputs: 234 

但是當我得到的字符串如下。

$string = "Created Ticket_Id#234"; 
preg_match("/Ticket Id_#([0-9]+\s)/", $string, $res); 
print $res[1]; 

Outputs: nothing 

是否有這樣做沒有尋找空白的更好​​的辦法?

+0

這些都不應該在目前的工作。你在字符串中有'Ticket_Id#',但是你的正則表達式正在檢查'Ticket Id_#'。也許你的測試只是一個錯字? –

回答

3

是的,只是使用\b,字邊界特殊字符類,而不是\s

所以你模式是:

/\bTicket_Id#([0-9]+)\b/ 

注意,我把特殊字符類出捕獲括號,你不必捕捉到它。

另外我注意到你的字符串有Ticket_Id#234,而你的正則表達式有Ticket Id#234。你應該根據實際情況更改正則表達式中的下劃線。

+0

感謝這工作就像一種享受。 – aHunter

0

一些。你可以使用一個單詞邊界:

"/Ticket Id_#([0-9]+)\b/" 

檢查對字符串的結尾:

"/Ticket Id_#([0-9]+)(\s|$)/" 

或者只是收集所有的數字:

"/Ticket Id_#([0-9]+)/" 
1

只需卸下最後\s

取決於字符串或正則表達式是否正確

/Ticket_Id#([0-9]+)/ 

/Ticket Id_#([0-9]+)/ 

這將停止在發現最後一位數字,並返回搜索到的號碼。