PHP:常规exp,从字符串中获取最后一个数字


PHP: Regular exp to get the last number from exactly string

我正在尝试获取与原始字符串和最终数字匹配的字符串。

我得到了这些字符串:

mod_courts2
mod_courts_config
mod_courts_config2

从这些字符串中,我想要的字符串仅与最后带有数字的"mod_courts"匹配。

我正在这样做:

if (strpos($t, "mod_courts") !== FALSE) {
  preg_match('/^'w+('d+)$/U', $t, $match);
  echo $match;
}

这让我"mod_courts2""mod_courts_config2",我只想"mod_courts2"

使用以下正则表达式:

/^[a-z]+_[a-z]+('d+)$/

解释:

  • ^ - 断言字符串开头的位置
  • [a-z]+ - 匹配任何字母一次或多次
  • _ - 匹配文本未计分字符
  • [a-z]+ - 匹配任何字母一次或多次
  • ('d+) - 匹配(并捕获)0到9之间的任何数字一次或多次
  • $ - 断言字符串末尾的位置

测试用例:

$array = array(
    'mod_courts2',
    'mod_courts_config',
    'mod_courts_config2'
);
foreach ($array as $string) {
    if(preg_match('/^[a-z]+_[a-z]+('d+)$/i', $string, $matches)) {
        print_r($matches);
    }
}

输出:

Array
(
    [0] => mod_courts2
    [1] => 2
)

很简单,你可以做到:

/^(mod_courts'd+)$/

但是,如果您只想要以下格式:sometext_somettext2 ,则可以使用以下正则表达式:

/^([a-zA-Z]+_[a-zA-Z]+'d+)$/ or
/^([^_]+_[^_]+'d+)$/

演示

http://regex101.com/r/jP8iC1http://regex101.com/r/tI1uX8http://regex101.com/r/fX8pO5

^mod_courts'd+$

这应该做到

你可以

只使用

^mod_courts[0-9]+$

含义mod_courts后跟一个数字(仅此而已,这要归功于^$匹配字符串的开头和结尾)。无需strpos检查。