我有一系列关键字,我想与某个项目名称进行匹配,以确定它是否是人工项目。我该如何编写模式正则表达式,以便在更简洁的代码块中将它们全部匹配?
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;
}
答案 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”字符,而+是串联。