2013-01-15 142 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]+)/ 

这将停止在发现最后一位数字,并返回搜索到的号码。