2

可能重复:
正则表达式中的 ^ 和 $ 是什么意思?

我一点也不擅长正则表达式,我知道它们非常重要,但一直没有时间研究它们。无论如何,我只是想确保在这些字符串中:

MAX_AGE_60
MAX_AGE_80
...
MAX_AGE_X

其中更一般X的是 a 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和?1max

4

2 回答 2

2

我不确定你在括号之间做什么。试试这个:

$pattern = '/^MAX_AGE_[\p{N}]+$/iu';

^$ 和 not 之间的区别在于,它们仅标记 LINE 开头和/或结尾的匹配项

您可以使用此站点来测试您的表达式(非 unicode): http ://www.gskinner.com/RegExr/

于 2012-05-18T15:35:16.443 回答
0

尝试使用

$pattern = '/^MAX_AGE_(?P<max>\d+)\s*$/i';

因为在行结束之前可能有空格。

于 2012-05-18T15:52:28.430 回答