php regex sprintf在文件扩展名上添加斜杠

时间:2013-05-11 08:35:24

标签: php regex printf

我对以下代码有疑问:pastebin。例如:

/^\/index\.php\/index\/home\/(\w+)$/

它在.php扩展名之前添加了一个斜杠。任何想法如何解决它?

1 个答案:

答案 0 :(得分:2)

好吧,如果你把这个例子作为uri传递,我在第10行看到你有preg_quote($uri)。那应该是原因。由于dot(。)在Regex中有意义,因此函数可以逃避它。

但这就是你想要的我相信,因为如果剥去斜线,你的正则表达式将匹配任何字符而不是点(包括点)。所以这些都是有效的:

indexBphp
index-php
indexmphp
index.php
etc...

Dot in Regex意味着匹配此位置的任何角色。所以我相信没有错,对吧?

解决这个问题的一种方法是,如果您仍然希望拥有该点,则可以在两个独立的部分构建正则表达式:

$urlDivided = explode('.php', $url);
$this->finalRegex = preg_quote($urlDivided[0]) . '.php' . preg_quote($urlDivided[1]);

显然,上述方法假设您在网址中始终使用“.php”扩展名。你应该进行健全性检查。