如何编写与preg_match一起使用的正则表达式?

时间:2018-08-16 15:10:42

标签: php regex

我有一系列关键字,我想与某个项目名称进行匹配,以确定它是否是人工项目。我该如何编写模式正则表达式,以便在更简洁的代码块中将它们全部匹配?

if(preg_match('/(LABOR)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(SERVICES)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Pull and Prep)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Supervision)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Coordination)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Disposal)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Handling)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Inspect)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Re-ship)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Storage)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Management)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Show Form)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Receive)/i', $Item[Name])){        
    $subtotal += $mysubtotal;
}elseif(preg_match('/(Paperwork)/i', $Item[Name])){
    $subtotal += $mysubtotal;
}

4 个答案:

答案 0 :(得分:2)

带有|及其第五个参数的管道preg_replace应该是您所需要的。

preg_replace('/LABOR|SERVICES|Pull and Prep|Supervision|Coordination|Disposal|Handling|Inspect|Re-ship|Storage|Management|Show Form|Receive|Paperwork/i', '', $Item['Name'], -1, $subtotal);

您可能还希望使用单词边界,以便您知道它是完全匹配的(除非劳动,劳动等有效吗?):

preg_replace('/\b(?:LABOR|SERVICES|Pull and Prep|Supervision|Coordination|Disposal|Handling|Inspect|Re-ship|Storage|Management|Show Form|Receive|Paperwork)\b/i', '', $Item['Name'], -1, $subtotal);

答案 1 :(得分:0)

只需使用|(表示OR)。

所以,你的油菜看起来像这样:

if(preg_match('/LABOR|SERVICES|Pull and Prep|...|.../i', $Item['Name'])){        
    $subtotal += $mysubtotal;
}

当然,不要忘了引用数组键(感谢@mario):$Item['Name']

答案 2 :(得分:0)

您可以按照其他建议使用|。 或者,您也可以尝试使用in_array()并与正则表达式的组0匹配。

<?php

$desired_values = ['LABOR','SERVICES','Pull and Prep','Supervision','Coordination','Disposal','Handling','Inspect','Re-ship','Storage','Management','Show Form','Receive','Paperwork'];

$matches = [];

$string = "Pull and Prep";

if(preg_match('/.+/i',$string,$matches) && in_array($matches[0],$desired_values)){
    $subtotal += $mysubtotal;
}

答案 3 :(得分:-2)

如果我有一个正则表达式的列表A,并且我想知道一个字符串是否包含其中的任何一个,我可以preg_match:

A [1] +“ |” + A [2] +“ |” + A [3]

这里,|是正则表达式的“ OR”或“ Union”字符,而+是串联。