user188962
user188962

Reputation:

How to strip this part of my string?

 $string = "Hot_Chicks_call_me_at_123456789";

How can I strip away so that I only have the numberst after the last letter in the string above?

Example, I need a way to check a string and remove everything in front of (the last UNDERSCORE FOLLOWED by the NUMBERS)

Any smart solutions for this?

Thanks

BTW, it's PHP!

Upvotes: 2

Views: 160

Answers (4)

Jim Dennis
Jim Dennis

Reputation: 17530

To be a bit churlish, your stated specification would suggest the following algorithm:

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))

It returns only the digits from the end of the string up to the first letter it encounters.

Of course this example is in Python, since I don't know PHP nearly as well. However it should be easily translated as the concept is easy enough ... reverse the string (or iterate from the end towards the beginning) and accumulate digits until you find a letter and break (or fall out of the loop at the beginning of the string).

In C it would be more efficient to use something a bit like for(x=strlen(s);x>s;x--) to walk backwards through the string, saving a pointer to the most recently encountered digit until we break or drop out of the loop at the beginning of the string. Then return the pointer into the middle of the string where our most recent (leftmost) digit was found.

Upvotes: 0

Alana Storm
Alana Storm

Reputation: 166166

PHP's PCRE Regular Expression engine was built for this kind of task

$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";

Upvotes: 1

meder omuraliev
meder omuraliev

Reputation: 186762

If it always ends in a number you can just match /(\d+)$/ with regex, is the formatting consistent? Is there anything between the numbers like dashes or spaces?

You can use preg_match for the regex part.

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

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

I only recommend this solution if speed isn't an issue, and if the formatting is completely consistent.

Upvotes: 2

Galen
Galen

Reputation: 30180

Without using a regular expression

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

Upvotes: 6

Related Questions