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

时间:2014-04-07 09:27:48

标签: php regex

我正在尝试获取与原始字符串匹配的字符串,最后是数字。

我收到了这些字符串:

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"

4 个答案:

答案 0 :(得分:2)

使用以下正则表达式:

/^[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
)

答案 1 :(得分:1)

很简单,你可以这样做:

/^(mod_courts\d+)$/

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

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

/^([^_]+_[^_]+\d+)$/

演示

http://regex101.com/r/jP8iC1
http://regex101.com/r/tI1uX8
http://regex101.com/r/fX8pO5

答案 2 :(得分:1)

^mod_courts\d+$

这应该做到

答案 3 :(得分:1)

你可以使用

^mod_courts[0-9]+$

意思是mod_courts后跟一个数字(只有那个,感谢^$匹配字符串的开头和结尾)。无需strpos检查。