如果/不能在PHP中工作

时间:2014-05-17 15:15:32

标签: php regex

我在我的网站上创建了一个搜索并依赖于字符串中写的是什么术语,它需要运行不同的php代码。

例如,人们可以输入#rtp drum and bass music,然后它会为此执行php代码。

另一种情况是,如果“播放鼓和贝司音乐的收音机”中的某些类型,我将需要它来运行不同的代码。

最后,有人可以输入#rtp robbie williams songs,它还需要它来运行不同的代码。我的下面的代码不起作用。有什么想法吗?

if(preg_match('[#rtp|music]', $a)){
    preg_match('/#rtp (.*) music/', $a, $match);
    $tags = $match[1];
}

if(preg_match('[radio|that|plays|music]', $a)){
    preg_match('/plays (.*) music/', $a, $match);
    $tags = $match[1];
}

if(preg_match('[#rtp|songs]', $a)){
    preg_match('/#rtp (.*) songs/', $a, $match);
    $tags = $match[1];
}

$tags = explode(' ', $tags);
$tags = implode("%' OR `tags` LIKE '%", $tags);
$result1 = mysql_query("SELECT * FROM `Stations` WHERE `tags` LIKE '%$tags%'" );
$num_rows1 = mysql_num_rows($result1);

echo $num_rows1;

2 个答案:

答案 0 :(得分:0)

查看您的代码,也许使用括号将按预期工作。当您使用[#rtp|music]时,所有匹配的是#。看看here。括号捕获您的正则表达式暗示应捕获的整个字符串。另外,使用else if进行其他检查。这是我重写的代码。

if (preg_match('(#rtp|music)', $a)){
    preg_match('/#rtp (.*) music/', $a, $match);
    $tags = $match[1];
}

else if (preg_match('(radio|that|plays|music)', $a)){
    preg_match('/plays (.*) music/', $a, $match);
    $tags = $match[1];
}

else if (preg_match('(#rtp|songs)', $a)){
    preg_match('/#rtp (.*) songs/', $a, $match);
    $tags = $match[1];
}

$tags = explode(' ', $tags);
$tags = implode("%' OR `tags` LIKE '%", $tags);
$result1 = mysql_query("SELECT * FROM `Stations` WHERE `tags` LIKE '%$tags%'" );
$num_rows1 = mysql_num_rows($result1);

echo $num_rows1;

那说 - 而且我打赌我不会是唯一一个说这个的人 - 但是你应该使用mysql_*mysqli_*扩展名替换所有来电,因为mysql_*不仅仅是{{1}}从PHP 5.3开始,但在PHP 5.5中完全消失了。更多详情here

答案 1 :(得分:0)

您必须将最后两个if替换为elseif,否则$tags将被覆盖。

if(preg_match('[#rtp|music]', $a)){
    preg_match('/#rtp (.*) music/', $a, $match);
    $tags = $match[1];
}
elseif(preg_match('[radio|that|plays|music]', $a)){
    preg_match('/plays (.*) music/', $a, $match);
    $tags = $match[1];
}
elseif(preg_match('[#rtp|songs]', $a)){
    preg_match('/#rtp (.*) songs/', $a, $match);
    $tags = $match[1];
}

if (!empty($tags)) {
    ...

作为旁注,使用方括号作为模式分隔符并不是宇宙的最佳选择,因为它与字符类混淆。我建议用斜线替换它们:

if(preg_match('/#rtp|music/', $a))