1

我正在尝试提取字符串中的最后两位数字。首先,我删除所有空格或特殊字符并用连字符替换它们,然后如果有两个连字符相互跟随,我将它们删除。ext 我删除任何尾随连字符。接下来我想提取字符串中 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
4

3 回答 3

1

您可以使用strrchr()找到创建的 slug 中的最后一个破折号,然后使用substr().

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

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

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

演示

于 2013-02-19T13:42:54.410 回答
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
于 2013-02-19T13:52:34.253 回答
1

或者,如果您只想匹配连字符后的最后一个字符是数字:

$slug = trim(preg_replace('/[^a-z0-9]+/i', '-', $string), '-');
if (preg_match('/^.*-(\d+)$/', $slug, $matches)) {                                                                                               
    echo $matches[1];                                                                
} else {                                                                             
    echo 'No Match!';                                                                
}
于 2013-02-19T13:54:14.367 回答