我有一个示例字符串:
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";
}
但是结果为空,如何解决?
我有一个示例字符串:
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";
}
但是结果为空,如何解决?
你没有在任何地方捕捉你的模式。你需要这样做:
$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/
限制较少,因此您需要先放置更多限制条件
我认为你想要做的是:
if(preg_match('/^revision-(?[0-9]+)$/', $str, $matches)) {
echo "Edit ". $matches[0];
} elseif(preg_match('/revision/', $str)) {
echo "Edit 1";
} else {
echo "Auto save";
}
解释:
把它们放在一起,你就有了一个正则表达式的意思 如果字符串只包含'revision'、一个破折号和一个数字,保存数字并将其输出为编辑数字。否则输出“自动保存”。
if(preg_match('/revision/', $str))
将匹配除“自动保存”之外的所有情况。您可能希望/^revision$/
专门匹配“修订”。我猜你希望echo "Edit $1"
输出(.+?)
匹配。这不是它的工作原理。您必须使用第三个参数来捕获匹配项preg_match
:
if (preg_match('/revision-(.+?)/', $str, $match)) {
echo "Edit $match[1]";
}
选择:
您可以使用explode 来查找值。如果您的输出保持不变。
$match = end(explode('-', $str));
这会将“-”之后的值分配给 $match。
模式字符串可能有问题
希望下面的模式能解决你的问题。
preg_match('\'revision-2\'', 'revision revision-2 revision-3 revision-n...autosave', $matches);
还有一个有用的在线链接也可用于执行正则表达式匹配。这对您也有帮助:
http://www.functions-online.com/preg_match.html
快乐编码:)