正则表达式在PHP中不起作用

时间:2016-09-21 14:05:36

标签: php regex preg-match

如何检查正则表达式中的以下行?

[albums album_id ='41']

album_id之外,所有内容都是静态的。这可能是41或其他。

在我的代码下面,我尝试了但是那个不起作用:

$str = "[albums album_id='41']";
$regex = '/^[albums album_id=\'[0-9]\']$/';
if (preg_match($regex, $str)) {
    echo $str . " is a valid album ID.";
} else {
    echo $str . " is an invalid ablum ID. Please try again.";
}

谢谢

2 个答案:

答案 0 :(得分:4)

您需要转义第一个[并将+量词添加到[0-9]。未转义的第一个[创建了一个字符类 - [albums album_id=\'[0-9],这是您没想到的。

使用

$regex = '/^\[albums album_id=\'[0-9]+\']$/';

模式详情

  • ^ - 字符串开头
  • \[ - 文字[
  • albums album_id=\' - 文字字符串albums album_id='
  • [0-9]+ - 一个或多个数字(感谢+量词,如果此处没有数字,请使用*量词)
  • \'] - 文字字符串']
  • $ - 字符串结束。

请参阅PHP demo

$str = "[albums album_id='41']";
$regex = '/^\[albums album_id=\'[0-9]+\']$/';
if (preg_match($regex, $str)) {
    echo $str . " is a valid album ID.";
} else {
    echo $str . " is an invalid ablum ID. Please try again.";
}
// => [albums album_id='41'] is a valid album ID.

答案 1 :(得分:2)

您的正则表达式代码中有错误,请使用:

$regex = '/^[albums album_id=\'[0-9]+\']$/'

[0-9]之后的+是告诉您需要在0到9之间有一个或多个数字(如果你想要零或更多,你可以放*)

要在代码中使用正则表达式之前对其进行测试,您可以使用此网站regex101