-1

我有一个示例字符串:

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";
}

但是结果为空,如何解决?

4

5 回答 5

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/限制较少,因此您需要先放置更多限制条件

于 2013-11-13T09:38:39.720 回答
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'、一个破折号和一个数字,保存数字并将其输出为编辑数字。否则输出“自动保存”。

于 2013-11-13T09:41:00.420 回答
0
  1. 第一个if(preg_match('/revision/', $str))将匹配除“自动保存”之外的所有情况。您可能希望/^revision$/专门匹配“修订”。
  2. 我猜你希望echo "Edit $1"输出(.+?)匹配。这不是它的工作原理。您必须使用第三个参数来捕获匹配项preg_match

    if (preg_match('/revision-(.+?)/', $str, $match)) {
        echo "Edit $match[1]";
    }
    
于 2013-11-13T09:39:29.417 回答
0

选择:

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

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

这会将“-”之后的值分配给 $match。

于 2013-11-13T09:46:33.780 回答
0

模式字符串可能有问题

希望下面的模式能解决你的问题。

preg_match('\'revision-2\'', 'revision revision-2 revision-3 revision-n...autosave', $matches);

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

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

快乐编码:)

于 2013-11-13T10:02:14.777 回答