2013-02-19 63 views
1

我想提取字符串中的最后两个数字。首先,我删除任何空格或特殊字符,并用连字符替换它们,然后如果有两个连字符,则将其删除。 ext我删除任何尾随连字符。接下来,我想提取字符串中连字符后面的最后两个字符。例如,如何提取该字符串中的最后一个字符,即1在最后一个连字符后? awesome-page-1。我的代码是在这里提取最后一个字符

$string = 'awesome [email protected]'; 
    $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 

回答

1

您可以使用strrchr()找到所创建的塞的最后冲刺,然后跳过,使用substr()

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

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

如果在$string没有破折号,其结果将是空

Demo

+0

感谢的人。有用。 – sammyukavi 2013-02-19 13:49:43

1

您可以使用数组作为参数有关preg_replace;

$str = 'awesome   [email protected]'; 
$slug = preg_replace(
    array('~[^a-zA-Z0-9-]~', '~-+~'), 
    '-', 
    trim($str) 
); 
print $slug; // awesome-page-1 

preg_match('~-([^-]*)$~', $slug, $m); 
print $m[1]; // 1 
1

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

$slug = trim(preg_replace('/[^a-z0-9]+/i', '-', $string), '-'); 
if (preg_match('/^.*-(\d+)$/', $slug, $matches)) {                        
    echo $matches[1];                 
} else {                    
    echo 'No Match!';                 
} 
相关问题