我有一个示例字符串:
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,如何解决?
答案 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";
}
说明:
把它们放在一起,你就有了正则表达式的含义 如果字符串仅包含“revision”,短划线和数字,请保存该数字并将其输出为编辑号。否则输出'自动保存'。
答案 2 :(得分:0)
if(preg_match('/revision/', $str))
将匹配所有除“自动保存”以外的案例。您可能希望/^revision$/
专门与“修订版”匹配。我猜您希望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
快乐编码:)