在 PHP 正则表达式中使用 ^ 和 $ 的意外结果



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

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

MAX_AGE_60
MAX_AGE_80
...
MAX_AGE_X

其中更一般Xinteger至少找到一个匹配项并得到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)

那么为什么我不能强制字符串必须以该模式开头和结尾呢?应该如何解释结果数组?我的意思是索引01max

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

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

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

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

尝试使用

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

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

最新更新