0
$str = "check-me-01";
if(preg_match("#(\d){0,}$#",$str)) {
    $strArr = preg_split("#(\d){0,}$#",$str,2);
    print_r($strArr);
}

我正在使用上面的脚本从可以是任何数字的字符串中获取 01。但我总是得到

数组( [0] => check-me- [1] => )

有人可以帮我吗?

4

2 回答 2

0

你应该使用积极的前瞻
我也使用了POSIX 括号


PHP

$str = "check-me-01";
if (preg_match("#[[:digit:]]$#",$str)) {
    // the regex matches a zero length string, so just the position when it is true
    // the (?=regex) triggers a positive lookahead
    // it is true in this case, if you have many digits at the end of the string
    $strArr = preg_split("#(?=[[:digit:]]+$)#",$str,2);
    print_r($strArr);
}
于 2012-02-09T15:32:41.960 回答
0

如果您尝试从该字符串中获取 01,则应该只使用preg_match,而不是 preg_split。访问该链接,并检查如何获得结果匹配项。

引用:

int preg_match ( 字符串 $pattern , 字符串 $subject [, 数组 &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

注意&$matches。这就是你想要更仔细地观察的东西。

preg_split 将使用它匹配的任何内容作为分隔符:这就是您面临的问题。因此,任何匹配的东西都不会出现在结果数组中——只有两边的东西。

于 2012-02-09T15:25:04.663 回答