php正则表达式不返回匹配项
我有一个非常简单的正则表达式设置php正则表达式不返回匹配项,php,regex,preg-match,Php,Regex,Preg Match,我有一个非常简单的正则表达式设置 preg_match('/[0-9]*/', $item, $id); $item的字符串值为“” 当我打印($id)时,我得到一个空数组([0]=>) 我使用测试,它选择了我所期望的。它突出显示了数字29 我不明白为什么在PHP中它不能正确匹配。使用+而不是*,因为*将匹配零个实例。您需要一个或多个via+ preg_match('/[0-9]+/', $item, $id); print_r($id); Array ( [0] => 29
preg_match('/[0-9]*/', $item, $id);
$item的字符串值为“
”
当我打印($id)时,我得到一个空数组([0]=>)
我使用测试,它选择了我所期望的。它突出显示了数字29
我不明白为什么在PHP中它不能正确匹配。使用
+
而不是*
,因为*
将匹配零个实例。您需要一个或多个via+
preg_match('/[0-9]+/', $item, $id);
print_r($id);
Array
(
[0] => 29
)
小心使用这个
if (preg_match('/\d+/', $subject, $regs)) {
$result = $regs[0];
}
编辑:
请谨慎使用,因为\d+将只匹配主题字符串中任意位置的第一个数字序列。所以是的,使用起来不太安全 您可能被您的模式误导了:
/[0-9]*/
*
表示要匹配零个或多个字符preg_match
执行此操作时,它会成功地找到字符类[0-9]
中的零,并返回空字符串
你的意思可能是:
/[0-9]+/
+
表示您希望匹配一个或多个
Regexpal将为您提供所有匹配项,而不仅仅是第一个匹配项。请参见使用
preg\u match\u all
:。不,0组是完整模式,您不需要显式地对其进行分组。您的模式将引入与0相同的组1(具有相同的子模式)。@hakre Correct。实际问题是正则表达式中的*而不是+@JakeChamberlain*
表示“前面的零个或多个”<代码>+表示“前面的一个或多个”。因此,使用*
会使它匹配所有内容,即使没有找到数字。感谢您的解释。我假设选择0-9多次。为什么它要在js测试仪上使用php?不客气,你可以在这里找到正则表达式的一个很好的介绍:-查找量词部分。为什么要小心?OP可能需要知道原因。:)