我想在php中为动态生成的字符串编写一个正则表达式。
以下是我的用例 -
$str1 = {"testste", "comma", etc......};
上面的字符串不是静态的,每次都会改变。
$str2 = "huge log string";
以上字符串也是动态生成的。
我已将$ str1转换为数组,因为它是逗号分隔的。
现在创建了一个函数来检查$ str1数组项到$ str2
public function arrayInString($findArrayItems , $findinString){
$flag = false;
foreach($findArrayItems as $item){
if((($item!='') && strpos($findinString, $item)!==false)){
$flag = true;
}
}
return $flag;
}
这就是我目前使用的。
如果$ str1和$ str2都动态生成,我如何编写正则表达式以避免使用函数arrayInString。
答案 0 :(得分:1)
假设您的数组只包含您希望按原样匹配的单词或短语(即它们不包含正则表达式模式)。然后,您可以使用foreach()
在数组中的每个项目上使用preg_quote()
构建正则表达式模式。
你的原始arrayInString()
函数可能会比这更好,但正如Regex带来的开销一样。
$arr = array("One", "Two", "Three");
$str1 = "This is a Non-Match";
$str2 = "This one is a Match";
$first = true;
$regex = "/\b(?:";
foreach( $arr as $item ) {
$regex .= ($first?"":"|") . preg_quote( $item, '/' );
if($first) {$first = false;}
}
$regex .= ")\b/i";
// Regex is now equal to "/\b(?:One|Two|Three)\b/i"
print "Str1: " . (preg_match($regex, $str1)?"Matches":"Doesn't Match");
print "Str2: " . (preg_match($regex, $str2)?"Matches":"Doesn't Match");
这产生了正则表达式,其执行以下操作: