我有一个非常简单的正则表达式设置。
preg_match('/[0-9]*/', $item, $id);
$ item的字符串值为“<li class="page_item page-item-29 current_page_item"><a href="http://dcdc.siretesting.com/programs/child-care/" title="Child Care">Child Care</a></li>
”
当我print_r($id)
时,我得到一个空数组数组([0] =&gt;)
我使用http://regexpal.com/进行了测试,并按照我的预期进行选择。它突出了29号
我无法弄清楚为什么在PHP中它没有正确匹配。
答案 0 :(得分:2)
你可能被你的模式误导了:
/[0-9]*/
*
信号表示您要匹配零个或多个字符。 preg_match
执行此操作,它成功找到字符类[0-9]
的零并返回空字符串。
你的意思是:
/[0-9]+/
+
表示您要与一个或多个匹配的信号。
Regexpal将为您提供所有比赛,而不仅仅是第一场比赛。请参阅preg_match_all
:Demo。
答案 1 :(得分:1)
请谨慎使用......
if (preg_match('/\d+/', $subject, $regs)) {
$result = $regs[0];
}
编辑:
请谨慎使用,因为\ d +只会匹配主题字符串中任意位置的第一个数字序列。所以是的,使用起来不太安全。
答案 2 :(得分:0)
使用+
代替*
,因为*
将匹配零个实例。您需要+
一个或多个。
preg_match('/[0-9]+/', $item, $id);
print_r($id);
Array
(
[0] => 29
)