【发布时间】:2009-09-20 12:57:38
【问题描述】:
给定以下字符串,我如何匹配它末尾的整个数字?
$string = "Conacu P PPL Europe/Bucharest 680979";
我不得不说字符串的长度不是恒定的。
我选择的语言是 PHP。
谢谢。
【问题讨论】:
给定以下字符串,我如何匹配它末尾的整个数字?
$string = "Conacu P PPL Europe/Bucharest 680979";
我不得不说字符串的长度不是恒定的。
我选择的语言是 PHP。
谢谢。
【问题讨论】:
您可以使用带有preg_match 的正则表达式,如下所示:
$string = "Conacu P PPL Europe/Bucharest 680979";
$matches = array();
if (preg_match('#(\d+)$#', $string, $matches)) {
var_dump($matches[1]);
}
你会得到:
string '680979' (length=6)
这里有一些信息:
# 是分隔符——它们没有任何意义:它们只是表示正则表达式的开头和结尾;你可以使用任何你想要的字符(人们经常使用/)() 表示您想要捕获它们之间的内容
preg_match,作为第三个参数给出的数组将包含那些捕获的数据()中匹配的每个数据
\d 表示“一个数字”+ 表示一次或多次所以:
更多信息,您可以查看PCRE Patterns和Pattern Syntax。
【讨论】:
$matches[0] 已包含整个匹配项。
以下正则表达式应该可以解决问题:
/(\d+)$/
【讨论】:
编辑: 此答案检查字符串中的最后一个字符是否为数字。由于问题https://stackoverflow.com/q/12258656/1331430 与此问题完全相同,因此我将在此处发布我的答案。不过,对于这个问题的 OP 要求什么,请使用接受的答案。
这是我检查字符串中最后一个字符是否为数字的非正则表达式解决方案:
if (ctype_digit(substr($string, -1))) {
//last character in string is a digit.
}
substr 传递 start=-1 将返回字符串的最后一个字符,然后与 ctype_digit 进行检查,如果字符是数字则返回 true,否则返回 false。
参考资料:
【讨论】:
在不使用正则表达式的情况下获取字符串末尾的数字:
function getNumberAtEndOfString(string $string) : ?int
{
$result = sscanf(strrev($string), "%d%s");
if(isset($result[0])) return strrev($result[0]);
return null;
}
var_dump(getNumberAtEndOfString("Conacu P PPL Europe/Bucharest 680979")); //int(680979)
【讨论】: