我对正则表达并不擅长,我知道它们非常重要,但从未找到时间研究它们。无论如何,我只是想确保在这些字符串中:
MAX_AGE_60
MAX_AGE_80
...
MAX_AGE_X
其中一般X
为integer
,至少找到一个匹配,并获取数字X
。所以按照PHP文档的例子我写了这个:
// Starts and ends with the literal 'MAX_AGE_' followed by a group that is a
// number with at least one digit. Case insensitive
$pattern = '/^MAX_AGE_(?P<max>\d+)$/i';
$test = 'MAX_AGE_80';
$matches = array();
preg_match($pattern, $test, $matches);
var_dump($matches);
结果是错误的(惊讶......):
array (size=0)
empty
删除开始/结束分隔符(^
和$
)我得到了正确的结果:
array (size=3)
0 => string 'MAX_AGE_80' (length=10)
'max' => string '80' (length=2)
1 => string '80' (length=2)
那么为什么我不能强制字符串必须以该模式开始和结束?那怎么解释结果数组呢?我的意思是索引0
,1
和max
?
答案 0 :(得分:2)
我不确定你在那里的括号之间做了什么。试试这个:
$pattern = '/^MAX_AGE_[\p{N}]+$/iu';
^ $和not之间的区别在于,它们仅标记位于LINE的开头和/或末尾的匹配
您可以使用此站点测试您的表达式(非unicode): http://www.gskinner.com/RegExr/
答案 1 :(得分:0)
尝试使用
$pattern = '/^MAX_AGE_(?P<max>\d+)\s*$/i';
因为行结束前可能有空格。