PHP正则表达式找?或=不起作用

时间:2011-08-08 13:41:04

标签: php regex

我正在尝试编写代码以查看网站网址是否有“=”或“?”在网址

我在$ website(例如www.smith.com?page=1)中的网址应该被找到但是它不在以下代码中

$cleanurl_text = "You appear to have a clean url structure.";


$regex = '/=/i';
if (preg_match($regex, $website)) 
{
   $cleanurl_text = "You do not appear to have a clean url structure.";
}
$regex = '/?/i';   
if (preg_match($regex, $website)) 
{
   $cleanurl_text = "You do not appear to have a clean url structure.";
}

4 个答案:

答案 0 :(得分:4)

如果您只是匹配常量单个字符,则正则表达式不是最好的方法。更有效的正则表达式为/=|\?/,可以测试=?。表达式不起作用的原因是因为?是需要转义的字符。您可以了解正则表达式here

答案 1 :(得分:1)

您不应该使用正则表达式,而应使用http://php.net/manual/en/function.strstr.php

无论如何,如果你仍然想要你的正则表达式,你应该做这样的事情

$regex = '/=|\?/';   
if (preg_match($regex, $website)) 
{
    $cleanurl_text = "You do not appear to have a clean url structure.";
}

答案 2 :(得分:0)

您需要使用反斜杠转义这些字符。

答案 3 :(得分:0)

正则表达式适用于PATTERNS - 复杂(ish)字符串表达式,否则使用子字符串搜索表达这些表达式会非常繁琐。对于你正在做的单个角色,做法更有效率:

if (strpos($website, '=') !== FALSE) {
   $cleanurl_text = "You do not appear to have a clean url structure.";
}

正则表达式具有相对较高的启动成本,因为必须编译模式,初始化正则表达式状态引擎等等......所有这些只是为了寻找单个字符。相比之下,strpos将是“免费的”。