Aleksandar
Aleksandar

Reputation: 511

PHP remove all characters before, except last number

I have this php code:

$test = "http://cp.dmbshare.net:8000/hls/niehaus/niehaus/1822/1822_1139.ts";

I want only number 1139. But I can't find how to do with preg_replace. I made some pattern, but I can't do what I want..

Can anybody help me?

Upvotes: 2

Views: 583

Answers (3)

Pratik Soni
Pratik Soni

Reputation: 2588

The best approach to your question is as below

$test = "http://cp.dmbshare.net:8000/hls/niehaus/niehaus/1822/1822_1139.ts";

$test = preg_replace("/(?:.*)((?:\_)([0-9]+))(?:\.[a-z0-9]+)$/","$2",$test);

echo $test; // 1139

Explaination

(
    ?: Non-capturing group. Groups multiple tokens together without creating a capture group.
    . Dot. Matches any character except line breaks.
    * Star. Match 0 or more of the preceding token.
)
(
    Capturing group #1. Groups multiple tokens together and creates a capture group for extracting a substring or using a backreference.
    (
        ?: Non-capturing group. Groups multiple tokens together without creating a capture group.
        \_ Escaped character. Matches a "_" character (char code 95).
    )
    (
        Capturing group #2. Groups multiple tokens together and creates a capture group for extracting a substring or using a backreference.
        [ Character set. Match any character in the set.
        0-9 Range. Matches a character in the range "0" to "9" (char code 48 to 57).
        ]
        + Plus. Match 1 or more of the preceding token.
    )
)
(
    ?: Non-capturing group. Groups multiple tokens together without creating a capture group.
    \. Escaped character. Matches a "." character (char code 46).
    [ Character set. Match any character in the set.
    a-z Range. Matches a character in the range "a" to "z" (char code 97 to 122).
    ]
    + Plus. Match 1 or more of the preceding token.
)
$ End. Matches the end of the string, or the end of a line if the multiline flag (m) is enabled.

Upvotes: 1

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324650

It's always easier to break down a problem into smaller parts.

Your problem is "find the last number in the string".

I propose breaking it down into:

  1. Find all numbers in the string
  2. Take the last one

To that end, try this:

// match all numeric substrings
preg_match_all("/\d+/",$test,$matches);
// all matches are in $matches[0]
// get last:
$lastnumber = array_pop($matches[0]);

Done! See how problems get easier when you break them down?

Upvotes: 3

maximkou
maximkou

Reputation: 5332

preg_match('/(\d+)\.ts$/', $test, $matches);
echo $matches[1];

Upvotes: 4

Related Questions