1

我想用多个 $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

4

5 回答 5

3

如果只有一行必须匹配,您可以简单地将这些行连接成一个字符串:

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

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

于 2013-04-16T04:46:21.853 回答
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 /* , ... */);
于 2013-04-16T04:37:05.973 回答
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);

?>
于 2013-04-16T04:45:29.063 回答
0

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

$lines = array($line1, $line2, $line3);
preg_replace('/(Sex|Fantasy|Porn)/i', 'nevermind', $lines, -1, $count);
echo $count ? 1 : 2;
于 2013-04-16T04:51:31.197 回答
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;
}
于 2013-04-16T04:37:24.563 回答