我有一个问题,我需要返回一个固定子字符串后存在的数字值,而不管其周围字符串中的其他字符。我在那里,因为以下工作。
$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 :(得分: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]+)/"