字符串末尾的匹配编号

时间:2009-09-20 12:57:38

标签: php regex

如果给出以下字符串,我怎么能匹配它末尾的整个数字呢?

$string = "Conacu P PPL Europe/Bucharest 680979";

我必须告诉字符串的长度不是恒定的。

我选择的语言是PHP。

感谢。

3 个答案:

答案 0 :(得分:39)

您可以使用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 PatternsPattern Syntax

答案 1 :(得分:5)

以下正则表达式可以解决这个问题:

/(\d+)$/

答案 2 :(得分:1)

编辑:此答案会检查字符串中的最后一个字符是否为数字。由于问题https://stackoverflow.com/q/12258656/1331430已完全复制,我将在此处发布我的答案。对于OP要求的这个问题,请使用接受的答案。


这是我的非正则表达式解决方案,用于检查字符串中的最后一个字符是否为数字:

if (ctype_digit(substr($string, -1))) {
    //last character in string is a digit.
}

DEMO

传递start = substr

-1将返回字符串的最后一个字符,然后根据ctype_digit检查,如果字符是数字,则返回true,或者false否则。

<强>参考文献:

  1. substr
  2. ctype_digit