PHP Regex获得反向编号

时间:2014-01-20 10:41:36

标签: php regex

我有这个:

$pattern = 'dev/25{LASTNUMBER}/P/{YYYY}'
$var = 'dev/251/P/2014'

在这种情况下{LASTNUMBER} = 1如何从$ var

获取此信息

模式中的变量可以更多地始终在{}

模式可以通过不同的例子:

 $pattern = '{LASTNUMBER}/aa/bb/P/{OtherVar}'

在这种情况下,var将为1 / aa / bb / p / some并希望得到1

我需要获得{LASTNUMBER}模式并有结果

好吧也许是不可能的:)或者非常非常努力

3 个答案:

答案 0 :(得分:3)

使用正则表达式..

if (preg_match('~dev/25([0-9])/P/[0-9]{4}~', $var, $m)) {
    $lastnum = $m[1];
}

答案 1 :(得分:1)

$parts = explode("/", $pattern);
if (isset($parts[1])) {
    return substr($parts[1], -1);
}

将比正则表达更快:)

答案 2 :(得分:0)

你可能需要这个:

<?php
$pattern = 'dev/251/P/2014';
preg_match_all('%dev/25(.*?)/P/[\d]{4}%sim', $pattern, $match, PREG_PATTERN_ORDER);
$match = $match[1][0];
echo $match; // echo's 1
?>

检查online

如果您需要循环结果,可以使用:

<?php
$pattern = <<< EOF
dev/251/P/2014
dev/252/P/2014
dev/253/P/2014
dev/254/P/2014
dev/255/P/2014
EOF;

preg_match_all('%dev/25(.*?)/P/[\d]{4}%sim', $pattern , $match, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($match[1]); $i++) {
    echo  $match[1][$i]; //echo's 12345
}
?>

签入online