我正在尝试提取字符串中的最后两位数字。首先,我删除任何空格或特殊字符,然后用连字符替换它们,如果有两个连字符,则删除它们。我删除任何尾随连字符。接下来我想提取字符串中lat连字符后面的最后两个字符。例如,如何在最后一个连字符后提取此字符串中的最后一个字符,即1
? awesome-page-1
。我的代码在这里
$string = 'awesome page@1';
$slug = preg_replace('/[^a-zA-Z0-9]/', '-', $string);//replace spaces and special characters with space
$slug = preg_replace('#-{2,}#', '-', $slug);//two hyphens following each other
$slug = trim($slug, '-');//remove trailing hyphens
答案 0 :(得分:1)
您可以使用strrchr()
查找已创建的slu_中的最后一个破折号,然后使用substr()
跳过该破折号。
$slug = trim(preg_replace('/[^a-z0-9]+/i', '-', $string), '-');
echo substr(strrchr($slug, '-'), 1);
如果$string
中没有破折号,则结果为空
答案 1 :(得分:1)
您可以将数组用作preg_replace
;
$str = 'awesome page........@1';
$slug = preg_replace(
array('~[^a-zA-Z0-9-]~', '~-+~'),
'-',
trim($str)
);
print $slug; // awesome-page-1
preg_match('~-([^-]*)$~', $slug, $m);
print $m[1]; // 1
答案 2 :(得分:1)
或者,如果您只想匹配连字符后面的最后一个字符是数字:
$slug = trim(preg_replace('/[^a-z0-9]+/i', '-', $string), '-');
if (preg_match('/^.*-(\d+)$/', $slug, $matches)) {
echo $matches[1];
} else {
echo 'No Match!';
}