PHP 删除之前的所有字符,最后一个数字除外
PHP remove all characters before, except last number
我有这个 php 代码:
$test = "http://cp.dmbshare.net:8000/hls/niehaus/niehaus/1822/1822_1139.ts";
我只想要数字 1139
。但是我找不到如何处理 preg_replace。
我做了一些图案,但我做不到我想要的..
有人可以帮助我吗?
preg_match('/(\d+)\.ts$/', $test, $matches);
echo $matches[1];
将问题分解成更小的部分总是更容易。
你的问题是"find the last number in the string"。
我建议将其分解为:
- 查找字符串中的所有数字
- 取最后一个
为此,试试这个:
// match all numeric substrings
preg_match_all("/\d+/",$test,$matches);
// all matches are in $matches[0]
// get last:
$lastnumber = array_pop($matches[0]);
完成!看看当您分解问题时,问题是如何变得更容易的?
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]+)$/","",$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.
我有这个 php 代码:
$test = "http://cp.dmbshare.net:8000/hls/niehaus/niehaus/1822/1822_1139.ts";
我只想要数字 1139
。但是我找不到如何处理 preg_replace。
我做了一些图案,但我做不到我想要的..
有人可以帮助我吗?
preg_match('/(\d+)\.ts$/', $test, $matches);
echo $matches[1];
将问题分解成更小的部分总是更容易。
你的问题是"find the last number in the string"。
我建议将其分解为:
- 查找字符串中的所有数字
- 取最后一个
为此,试试这个:
// match all numeric substrings
preg_match_all("/\d+/",$test,$matches);
// all matches are in $matches[0]
// get last:
$lastnumber = array_pop($matches[0]);
完成!看看当您分解问题时,问题是如何变得更容易的?
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]+)$/","",$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.