将字符串与数字分开

时间:2015-07-03 22:45:24

标签: php regex

我有一个字符串,类似于max_length[5]。为了验证,我需要能够验证它是否具有字符串结构(max_length,min_length,exact_length的定义选项),[,数字(任何数量:5,121,5322等),]。类似的东西:

$string = 'max_length[5]';
$split = splitThis($string);  //replace splitThis() with a real function
//split looks like: array('max_length[]', 5) or something like that

如果$split能够以评论的形式出现,那么我可以轻松验证max_length[]是否为有效字符串,5是有效数字。我该怎么做?可能吗?我几个小时以来一直在寻找类似的场景,并且无法获得任何其他解决方案来解决我的问题。

this one这样的问题很相似,但我还没有能够在我的方案中使用它。

1 个答案:

答案 0 :(得分:2)

这并不是特别难以做到的。唯一棘手的是设计模式以更容易地提取有趣的数据:

function splitThis($str) {
    return preg_match('~\A(?:max|min|exact)_length(?=\[(\d+)]\z)~', $str, $m) ? $m : false;
}

print_r(splitThis("max_length[5]"));

模式细节:

~                          # pattern delimiter
\A                         # start of the string
(?:max|min|exact)_length
(?=                        # lookahead assertion: followed by:
    \[(\d+)]               # digits (captured in group 1) between square brackets 
    \z                     # end of the string
)
~

前瞻只是一个测试,里面的所有子模式都不是整个匹配的一部分。所以preg_match仅返回" max_length"作为整个匹配和捕获组1,所以" 5"。

用法:

if ( false !== ($result = splitThis($str)) ) {
    ...
} else {
    ...
}