在php中使用preg_match时的错误条件?

时间:2013-11-13 09:32:19

标签: php

我有一个示例字符串:

revision
revision-2
revision-3
revision-n...
autosave

和php代码

if(preg_match('/revision/', $str)) {
   echo "Edit 1";
}elseif(preg_match('/revision-(.+?)/', $str)) {
   echo "Edit $1";
}else {
   echo "Auto save";
}

但结果为null,如何解决?

5 个答案:

答案 0 :(得分:1)

你没有在任何地方捕捉你的模式。你需要这样做:

$str = 'revision-14';
if(preg_match('/revision-(.*)/', $str, $matches)) 
{
   echo "Edit ".$matches[1];
}
elseif(preg_match('/revision/', $str)) 
{
   echo "Edit 1";
}
else 
{
   echo "Auto save";
}

另请注意,/revision/限制性较小,因此您需要首先设置更具限制性的条件

答案 1 :(得分:1)

我认为你要做的是:

if(preg_match('/^revision-(?[0-9]+)$/', $str, $matches)) {
   echo "Edit ". $matches[0];
} elseif(preg_match('/revision/', $str)) {
   echo "Edit 1";
} else {
   echo "Auto save";
}

说明:

  • ̛'^'表示'以'开头'
  • (?)告诉正则表达式保存 匹配它包围
  • [0-9]表示0到9之间的所有字符
  • '+'表示一次或多次
  • '$'表示'以'结尾'

把它们放在一起,你就有了正则表达式的含义 如果字符串仅包含“revision”,短划线和数字,请保存该数字并将其输出为编辑号。否则输出'自动保存'。

答案 2 :(得分:0)

  1. 第一个if(preg_match('/revision/', $str))将匹配所有除“自动保存”以外的案例。您可能希望/^revision$/专门与“修订版”匹配。
  2. 我猜您希望echo "Edit $1"输出(.+?)匹配。这不是它的工作原理。您必须使用preg_match的第三个参数捕获匹配项:

    if (preg_match('/revision-(.+?)/', $str, $match)) {
        echo "Edit $match[1]";
    }
    

答案 3 :(得分:0)

替代:

您可以使用explode来查找值。如果您的输出保持不变。

$match = end(explode('-', $str));

这会将' - '之后的值指定给$ match。

答案 4 :(得分:0)

模式字符串

可能存在一些问题

希望以下模式可以解决你的问题。

preg_match('\'revision-2 \'','修订版 修订2 修订3 修订-N ... autosave',$ matches);

还有一个有用的在线链接可用于执行正则表达式匹配。这对你也有帮助:

http://www.functions-online.com/preg_match.html

快乐编码:)