PHP-PCRE的问题
我对PHP PCRE有问题,而且我习惯于POSIX,所以我不太确定我做错了什么。基本上,此函数最多匹配10个由逗号分隔的数字。但是,它也匹配字符串PHP-PCRE的问题,php,regex,preg-match,pcre,Php,Regex,Preg Match,Pcre,我对PHP PCRE有问题,而且我习惯于POSIX,所以我不太确定我做错了什么。基本上,此函数最多匹配10个由逗号分隔的数字。但是,它也匹配字符串sdf(可能还有许多其他字符串),我看不出这是为什么。有人能帮我吗 $pattern='^\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?^'; $leftcheck=preg_m
sdf
(可能还有许多其他字符串),我看不出这是为什么。有人能帮我吗
$pattern='^\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?^';
$leftcheck=preg_match($pattern, $leftmodules);
$centercheck=preg_match($pattern, $centermodules);
$rightcheck=preg_match($pattern, $rightmodules);
if(!$leftcheck OR !$centercheck OR !$rightcheck)
{
$editpage = $_SERVER['HTTP_REFERER'].'?&error=1';
die("Location:$editpage");
}
我想如果你的号码只用逗号隔开,像这样的东西就可以了
$pattern = '^\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5}$';
我想如果你的号码只用逗号隔开,像这样的东西就可以了
$pattern = '^\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5}$';
您需要将图案包含在两个相等的符号之间才能使其有效。人们通常使用/
$pattern = '/some pattern/';
以匹配开始处的“^”和结尾处的“$”所需的全部内容。这可能是您的sdf
匹配的原因
$pattern = '/^whole pattern match$/';
这些数字是如何分开的,这有点让人困惑。是逗号还是空格?都可以吗?没有呢?这是我最好的猜测
$pattern = '/^\d{,5}[, ](\d{,5}[, ]){,9}$/';
您需要将图案包含在两个相等的符号之间才能使其有效。人们通常使用/
$pattern = '/some pattern/';
以匹配开始处的“^”和结尾处的“$”所需的全部内容。这可能是您的sdf
匹配的原因
$pattern = '/^whole pattern match$/';
这些数字是如何分开的,这有点让人困惑。是逗号还是空格?都可以吗?没有呢?这是我最好的猜测
$pattern = '/^\d{,5}[, ](\d{,5}[, ]){,9}$/';
我假设如下:
- 空间可能存在,也可能不存在
- 数字可以是任意长度
- 只允许使用数字、空格和逗号
- 允许尾随逗号,后面不带数字
- 1到10个数字之间用逗号分隔是可以的
$pattern = '/^(\d+,* *){1,10}$/';
有效。我假设如下:
- 空间可能存在,也可能不存在
- 数字可以是任意长度
- 只允许使用数字、空格和逗号
- 允许尾随逗号,后面不带数字
- 1到10个数字之间用逗号分隔是可以的
$pattern = '/^(\d+,* *){1,10}$/';
有效。据我所见,您提供的正则表达式将匹配您传递给它的任何内容。原因如下
\d{0,5} #\d matches any digit character, while {0,5} means the
#preceding character must be repeated between **0** and five times
所以正则表达式本质上是短路。引擎看到字符串的第一个字符,会说“一个数字重复了0次吗?是吗?好的,这是一个匹配!从我看到的情况来看,您提供的正则表达式将匹配传递给它的任何内容。原因如下
\d{0,5} #\d matches any digit character, while {0,5} means the
#preceding character must be repeated between **0** and five times
因此,正则表达式本质上是短路。引擎看到字符串的第一个字符,就会说“一个数字重复了0次吗?”?对好的,这是一场比赛 @WAI933:您的主要问题是您的正则表达式以“^”结尾而不是$Asaph,胡萝卜被用作正则表达式的分隔符。不过,考虑到可读性,这不是最佳选择。@WAI933:您的主要问题是您的正则表达式以“^”结尾而不是$Asaph,胡萝卜被用作正则表达式的分隔符。但考虑到可读性,这不是最好的选择。您可能应该在模式中包含
/…/
分隔符。您可能应该在模式中包含/…/
分隔符。^被用作两个相等的符号。哇,这真是误导。^被用作两个相等的符号。哇,这真是误导。