首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP &正则表达式:关键字只出现一次

PHP &正则表达式:关键字只出现一次
EN

Stack Overflow用户
提问于 2011-01-16 23:49:18
回答 4查看 1.3K关注 0票数 1

如何确保某个关键字在使用正则表达式的输入中只出现一次?

我认为下面的表达式中有一些错误,因为我可以重复相同的关键字,

代码语言:javascript
运行
复制
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."/>';
    }

我只希望这是真的,

代码语言:javascript
运行
复制
form.php?category=something or form.php?

但不是这个,

代码语言:javascript
运行
复制
form.php?.php?category=something or form.php?.php?

请告诉我怎么修。

谢谢。

EN

Stack Overflow用户

发布于 2011-01-17 00:00:14

正如德米特里所说,你需要更多的逃脱。

正则表达式中的{1}不能确保一个模式在整个主题中只出现一次。它只是前一个字符串的量词。

否则,手动检查匹配的频率:

代码语言:javascript
运行
复制
preg_match_all("/(\.php\??)/", $str, $m);
$matched_once = count($m[1]) == 1;

如果要验证整个字符串,则必须指定完整的模式。使用^$。例如,在您的案例中:

代码语言:javascript
运行
复制
 preg_match("/\.php(\?[^?]*|)$/", $str)

它要么匹配.php?... (除了问号之外的所有内容),要么在最后只匹配.php ($在正则表达式中标记结尾)。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4706309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档