如何去掉我的这部分字符串?

时间:2009-11-21 00:05:25

标签: php

 $string = "Hot_Chicks_call_me_at_123456789";

如何剥离,以便我只在上面字符串中的最后一个字母后面有数字?

示例,我需要一种方法来检查字符串并删除前面的所有内容(最后一个由NUMBERS跟随的UNDERSCORE)

任何智能解决方案吗?

由于

顺便说一句,这是PHP!

4 个答案:

答案 0 :(得分:6)

不使用正则表达式

$string = "Hot_Chicks_call_me_at_123456789";
echo end( explode( '_', $string ) );

答案 1 :(得分:2)

如果它始终以数字结尾,您可以将/(\d+)$/与正则表达式匹配,格式是否一致?数字之间有什么东西,如破折号或空格吗?

您可以将preg_match用于正则表达式部分。

<?php
$subject = "abcdef_sdlfjk_kjdf_39843489328";
preg_match('/(\d+)$/', $subject, $matches);

if ( count( $matches ) > 1 ) {
    echo $matches[1];
}

如果速度不是问题,并且格式完全一致,我只建议使用此解决方案。

答案 2 :(得分:1)

PHP的PCRE正则表达式引擎是为这种任务而构建的

$string = "Hot_Chicks_call_me_at_123456789";

$new_string = preg_replace('{^.*_(\d+)$}x','$1',$string);

//same thing, but with whitespace ignoring and comments turned on for explanations
$new_string = preg_replace('{
                                ^.*             #match any character at start of string
                                _               #up to the last underscore
                                (\d+)           #followed by all digits repeating at least once
                                $               #up to the end of the string
                            }x','$1',$string);  
echo $new_string . "\n";

答案 3 :(得分:0)

有点粗鲁,你陈述的规范会建议以下算法:

def trailing_number(s):
    results = list()
    for char in reversed(s):
        if char.isalpha(): break
        if char.isdigit(): results.append(char)
    return ''.join(reversed(results))

它只返回从字符串末尾到它遇到的第一个字母的数字。

当然这个例子是在Python中,因为我几乎不了解PHP。然而它应该很容易翻译,因为这个概念很容易...反转字符串(或从末尾向开头迭代)并累积数字,直到你找到一个字母和中断(或者在开头的时候掉出循环)字符串)。

在C中,使用类似for(x=strlen(s);x>s;x--)的东西来向后走过字符串会更有效,保存指向最近遇到的数字的指针,直到我们在开始时断开或退出循环字符串。然后将指针返回到我们最近(最左边)数字的字符串中间。