提取最后的字符

时间:2013-02-19 13:38:57

标签: php

我正在尝试提取字符串中的最后两位数字。首先,我删除任何空格或特殊字符,然后用连字符替换它们,如果有两个连字符,则删除它们。我删除任何尾随连字符。接下来我想提取字符串中lat连字符后面的最后两个字符。例如,如何在最后一个连字符后提取此字符串中的最后一个字符,即1awesome-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

3 个答案:

答案 0 :(得分:1)

您可以使用strrchr()查找已创建的slu_中的最后一个破折号,然后使用substr()跳过该破折号。

$slug = trim(preg_replace('/[^a-z0-9]+/i', '-', $string), '-');

echo substr(strrchr($slug, '-'), 1);

如果$string中没有破折号,则结果为空

Demo

答案 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!';                                                                
}