多个preg_match来检查多行中的结果

时间:2013-04-16 04:32:31

标签: php preg-match

我想用多个$ line检查preg_match ...这是我的代码

$line = "Hollywood Sex Fantasy , Porn";
if (preg_match("/(Sex|Fantasy|Porn)/i", $line)){
echo 1;}else {echo 2;}

现在我想检查很多喜欢的东西,比如

$line = "Hollywood Sex Fantasy , Porn";
if (preg_match("/(Sex|Fantasy|Porn)/i", $line, $line1, $line2)){
echo 1;}else {echo 2;}

类似上面的代码$line1 $line2 $line3

5 个答案:

答案 0 :(得分:3)

如果只需要匹配一行,则可以简单地将这些行连接成一个字符串:

if (preg_match("/(Sex|Fantasy|Porn)/i", "$line $line1 $line2")) {
    echo 1;
} else {
    echo 2;
}

这就像OR条件一样;匹配line1或line2或line3 => 1。

答案 1 :(得分:1)

$lines = array($line1, $line2, $line3);
$flag  = false;

foreach($lines as $line){
   if (preg_match("/(Sex|Fantasy|Porn)/i", $line)){
      $flag = true;
      break;
   }
}

unset($lines);

if($flag){
   echo 1;
} else {
   echo 2;
}
?>

您可以将其转换为函数:

function x(){
    $args  = func_get_args();

    if(count($args) < 2)return false;

    $regex = array_shift($args);

    foreach($args as $line){
       if(preg_match($regex, $line)){
          return true;
       }
    }

    return false;
}

用法:

x("/(Sex|Fantasy|Porn)/i", $line1, $line2, $line3 /* , ... */);

答案 2 :(得分:1)

<?php
    //assuming the array keys represent line numbers
    $my_array = array('1'=>$line1,'2'=>$line2,'3'=>$line3);
    $pattern = '!(Sex|Fantasy|Porn)!i';

    $matches = array();
    foreach ($my_array as $key=>$value){
      if(preg_match($pattern,$value)){
            $matches[]=$key;  
      }
    }

    print_r($matches);

?>

答案 3 :(得分:0)

$line = "Hollywood Sex Fantasy , Porn";

if ((preg_match("/(Sex|Fantasy|Porn)/i", $line) && (preg_match("/(Sex|Fantasy|Porn)/i", $line1) &&  (preg_match("/(Sex|Fantasy|Porn)/i", $line2))
{
    echo 1;
}
else
{
    echo 2;
}

答案 4 :(得分:0)

疯狂的例子。使用preg_replace而不是preg_match:^)

$lines = array($line1, $line2, $line3);
preg_replace('/(Sex|Fantasy|Porn)/i', 'nevermind', $lines, -1, $count);
echo $count ? 1 : 2;