如何确保某个关键字在使用正则表达式的输入中只出现一次?
我认为下面的表达式中有一些错误,因为我可以重复相同的关键字,
if (!preg_match('/\b(.php?){1}\b/', $cfg_path))
{
$error = true;
echo '<error elementid="cfg_path" message="PATH - make sure you have a \'.php?\' in the path."/>';
}
我只希望这是真的,
form.php?category=something or form.php?
但不是这个,
form.php?.php?category=something or form.php?.php?
请告诉我怎么修。
谢谢。
发布于 2011-01-17 00:00:14
正如德米特里所说,你需要更多的逃脱。
正则表达式中的{1}
不能确保一个模式在整个主题中只出现一次。它只是前一个字符串的量词。
否则,手动检查匹配的频率:
preg_match_all("/(\.php\??)/", $str, $m);
$matched_once = count($m[1]) == 1;
如果要验证整个字符串,则必须指定完整的模式。使用^
或$
。例如,在您的案例中:
preg_match("/\.php(\?[^?]*|)$/", $str)
它要么匹配.php?...
(除了问号之外的所有内容),要么在最后只匹配.php
($
在正则表达式中标记结尾)。
https://stackoverflow.com/questions/4706309
复制相似问题