PHP删除之前的所有字符,除了最后一个数字

时间:2016-05-29 11:58:35

标签: php preg-replace

我有这个PHP代码:

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

我只想要号码1139。但我无法找到如何处理preg_replace。 我做了一些模式,但我无法做我想做的事情。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

将问题分解为更小的部分总是更容易。

您的问题是"找到字符串中的最后一个数字"。

我建议将其分解为:

  1. 查找字符串中的所有数字
  2. 拿最后一个
  3. 为此,试试这个:

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

    完成!了解问题在分解时如何变得更容易?

答案 2 :(得分:1)

  

您问题的最佳方法如下

$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
  

<强>释

(
    ?: 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.