Emerson Maningo
Emerson Maningo

Reputation: 2269

Extract last section of string

I have a string like this:

[numbers]firstword[numbers]mytargetstring

I would like to know how is it possible to extract "targetstring" taking account the following :

a.) Numbers are numerical digits for example, my complete string with numbers:

12firstword21mytargetstring

b.) Numbers can be any digits, for example above are two digits each, but it can be any number of digits like this:

123firstword21567mytargetstring

Regardless of the number of digits, I am only interested in extracting "mytargetstring".

By the way "firstword" is fixed and will not change with any combination.

I am not very good in Regex so I appreciate someone with strong background can suggest how to do this using PHP. Thank you so much.

Upvotes: 1

Views: 96

Answers (6)

You don't need regex for that:

for ($i=strlen($string)-1; $i; $i--) {
   if (is_numeric($string[$i])) break; 
}

$extracted_string = substr($string, $i+1);

Above it's probably the faster implementation you can get, certainly faster than using regex, which you don't need for this simple case.

See the working demo

Upvotes: 1

Rajeev Ranjan
Rajeev Ranjan

Reputation: 4142

your simple solution is here :-

$keywords = preg_split("/[\d,]+/", "hypertext123language2434programming");
echo($keywords[2]);

Upvotes: 0

Rohan Kumar
Rohan Kumar

Reputation: 40639

Try it like,

print_r(preg_split('/\d+/i', "12firstword21mytargetstring"));
echo '<br/>';
echo 'Final string is: '.end(preg_split('/\d+/i', "12firstword21mytargetstring"));

Tested on http://writecodeonline.com/php/

Upvotes: 1

sectus
sectus

Reputation: 15464

You can do it with preg_match and pattern syntax.

$string ='2firstword21mytargetstring';
if (preg_match ('/\d(\D*)$/', $string, $match)){
//                       ^ -- end of string
//                     ^   -- 0 or more
//                   ^^    -- any non digit character
//                ^^       -- any digit character                      
    var_dump($match[1]);}

Upvotes: 2

fullybaked
fullybaked

Reputation: 4127

This will do it (or should do)

$input = '12firstword21mytargetstring';

preg_match('/\d+\w+\d+(\w+)$/', $input, $matches);

echo $matches[1]; // mytargetstring

It breaks down as

\d+\w+\d+(\w+)$

\d+ - One or more numbers

\w+ - followed by 1 or more word characters

\d+ - followed by 1 or more numbers

(\w+)$ - followed by 1 or more word characters that end the string. The brackets mark this as a group you want to extract

Upvotes: 2

Peter Pivarc
Peter Pivarc

Reputation: 469

preg_match("/[0-9]+[a-z]+[0-9]+([a-z]+)/i", $your_string, $matches);
print_r($matches);

Upvotes: 2

Related Questions