首先让我说我不太了解 Reg-Ex,所以我希望有人可以帮助我。
我有一个字符串,例如“/1/3”或“/1/34/2/6”,我试图在决赛之后得到最后一个数字/
一个朋友给我发了这个公式,但它给我的只是最后一个/
preg_replace('~^/([0-9]+)(/.*)?$~', '$1', $cat['path']);
$cat[path] 是我得到的字符串。我应该如何改变这个给我最终的数字而不是斜线/
?
我会在不使用正则表达式的情况下解决这个问题。
$parts = explode('/', $input);
$latest_one = array_pop($parts);
你要:
#/(\d+)$#
其中 # 是分隔符。它的意思是,
/ a slash,
\d+ a sequence of one or more digits,
$ then the end.
括号表示您希望捕获序列。
PHP 代码将是:
$string = "1/12/26";
if (preg_match('#/(\d+)$#', $string, $results))
{
$number = $results[1]; // [0] holds the whole string
print "The last number is $number.";
}
是$cat['path']
文件系统还是 URL 路径?PHP 已经有了处理这些的函数。
$cat['path'] = '/1/34/2/6';
var_dump(
basename($cat['path']),
pathinfo($cat['path'], PATHINFO_BASENAME)
);
有用的信息
preg_match('{/(\d)[^\d]*$}', $string, $matches);
$matches[0]; // this should be your number
{
and}
是定界符——通常的定界符是/
and/
或@
and@
但如果方便,您可以选择允许您转义尽可能少的字符的定界符;/
匹配一个斜杠 - 如果我们使用/
分隔符,我们需要用反斜杠转义这个斜杠;\d
匹配一个数字 - \d* 将匹配任意数量的数字,包括没有数字,\d+ 将匹配任意数量的数字,但至少匹配一个数字;[^\d]*
匹配任何不是数字的东西;如果您确定字符串结尾之前的最后一个字符除了数字之外绝不是其他任何东西,这可能是可选的;$
匹配字符串的结尾——这确保我们看到的是字符串的结尾;使用分隔符的等效示例/
:
preg_match('/\/(\d)[^\d]*$/', $string, $matches);