我有一个字符串说
$str =" I am engineer".
$array_match =array('doctor','inspector','teacher');
找出字符串中给定的特定职业的正确方法是什么?在数组中存在或不使用正则表达式,我尝试过以下代码但没有得到结果,出了什么问题
<?php
$str =" I am engineer"
$array_match =aaray('doctor','inspector','teacher');
$flag=0;
foreach($array_match as $match)
{
if(preg_match('~'.$match.'~',$str)== true)
{
$flag=1;
}
else
{
$flag=0;
}
}
if($flag==1)
{
echo "word matched .";
}
else
{
echo "word not match ";
}
?>
答案 0 :(得分:1)
删除循环中的else
并在找到匹配后添加一个中断。一旦设置好,就无需重置标志。另外,请使用strpos()或stripos()代替preg_match
。根据您的情况,不需要使用正则表达式。
$str = "I am engineer";
$array_match = array('doctor','inspector','teacher');
$flag = false; // Flag defaults to false
foreach($array_match as $word) {
// Check if profession is in string
if (stripos($str, $word) !== false) {
// If profession is found, set flag to true and exit loop
$flag = true;
break;
}
}
if ($flag)
echo 'Word matched';
else
echo 'Word not matched';
答案 1 :(得分:1)
它现在无法正常工作的原因是,当找到匹配项时,您没有突破循环。这意味着如果你的第二个单词匹配,flag将为“1”,但循环将继续。然后,如果下一个单词不匹配,则标志将被重置为“0”,打印“单词不匹配”。
将第$flag = 1
行改为这两行:
$flag = 1;
break;
它会起作用。
答案 2 :(得分:1)
有很多&#34;正确&#34;解决问题的方法,可能没有最好的&#34;方式(这将是一个意见问题)。
您可以进行搜索,无求助于遍历您的专业阵列。您可以在您的职业数组上调用implode来生成单个正则表达式,然后您可以检查您的字符串以查看该正则表达式是否匹配。
例如,我们假设您从:
开始$string = " I am engineer";
$professions = array('doctor','inspector','teacher');
您可以生成正则表达式(不要忘记开始和结束斜杠),如下所示:
$regexp = '/' . implode($professions, '|') . '/';
// yields: "/doctor|inspector|teacher/"
此正则表达式将匹配具有 doctor 或检查员或教师的字符串。
然后你可以拨打preg_match来查看你的字符串是否有任何匹配。如果是这样,它们将位于您的$matches
数组中:
if (preg_match($regexp, $string, $matches)) {
print "Found this profession: " . $matches[0] . "\n";
}
当你把它们放在一起时,你有这个:
$string = " I am engineer";
$professions = array('doctor','inspector','teacher');
$regexp = '/' . implode($professions, '|') . '/';
if (preg_match($regexp, $string, $matches)) {
print "Found this profession: " . $matches[0] . "\n";
}
else {
print "No matching profession found.\n";
}
这是一段稍短的代码,您不必担心循环使用您的各种专业。实际上,大部分工作都是在调用implode
和preg_match
时完成的。
顺便说一下,这个例子只是在测试字符串中查找专业的第一个匹配,并输出该专业。如果您的测试字符串有多个职业匹配,则需要调用preg_match_all
并仔细查看$matches
数组。我会为你做这个练习。
答案 3 :(得分:0)
您可以对array_filter和strstr
执行相同的操作$string =" I am engineer";
$array_match =array('doctor','inspector','teacher');
$result = count(array_filter($array_match, create_function('$arr','return strstr("'.$string.'", $arr);')))>0;
if($result)
echo "word matched";
else
echo "not matched";