PHP preg_match在子字符串后返回字符串中的值

时间:2013-01-15 00:43:28

标签: php regex

我有一个问题,我需要返回一个固定子字符串后存在的数字值,而不管其周围字符串中的其他字符。我在那里,因为以下工作。

$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

有没有更好的方法可以在不寻找空白的情况下进行此操作?

3 个答案:

答案 0 :(得分:3)

是的,只需使用\b,即字边界特殊字符类,而不是\s

所以你的模式是:

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

请注意,我将特殊字符类从捕获括号中拉出,因为您无需捕获它。

另外我注意到你的字符串有Ticket_Id#234,而你的正则表达式有Ticket Id#234。您应该根据具体情况更改正则表达式中的下划线。

答案 1 :(得分:1)

只需删除最终的\s

即可

取决于字符串或正则表达式是否正确

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

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

这将停在找到的最后一位数字并返回搜索到的数字。

答案 2 :(得分:0)

一些。你可以使用单词边界:

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

检查字符串的结尾:

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

或者只收集所有数字:

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