php搜索字符串单词如果找不到搜索另一个单词

时间:2011-01-24 19:25:07

标签: php search loops

我想在一个字符串中搜索一个单词,如果找不到这个单词,我希望它能够搜索另一个单词并继续前进,直到找到一个我已经看到的代码来搜索字符串但不是继续搜索。

干杯 阿什利

P.s php代码是我需要的

非常感谢你的帮助,

我将在以后发布我的wip代码,谢谢你的提示。

4 个答案:

答案 0 :(得分:1)

这很简单:

$string = "This is the string I want to search in for a third word";

$words = array('first', 'second', 'third');
$found = '';
foreach ($words as $word) {
    if (stripos($string, $words) !== false) {
        $found = $word;
        break;
    }
}
echo "This first match found was '$found'";

注意:使用strpos(或stripos进行不区分大小写的搜索),因为它们只返回一个整数位置。其他如strstr会返回字符串的一部分,这对于此目的是不必要的。

修改

或者,没有循环,你可以做一个正则表达式:

$words = array('first', 'second', 'third');
$regex = '/(' . implode('|', $words) . ')/i';
//$regex becomes '/(first|second|third)/i'
if (preg_match($regex, $string, $match)) {
    echo "The first match found was {$match[0]}";
}

答案 1 :(得分:1)

类似的东西:

$haystack = 'PHP is popular and powerful';
$needles = array('Java','Perl','PHP');
$found = '';
foreach($needles as $needle) {
        if(strpos($haystack,$needle) !== false) {
                $found = $needle;
                break;
        }
}

if($found !== '') {
        echo "Needle $found found in $haystack\n";
} else {
        echo "No needles found\n";
}

上面的代码会将子字符串匹配视为有效匹配。例如,如果针是'HP',则会找到它,因为它是PHP的子字符串。

要进行完整的单词匹配,您可以使用preg_match作为:

foreach($needles as &$needle) {
        $needle = preg_quote($needle);
}

$pattern = '!\b('.implode('|',$needles).')\b!';

if(preg_match($pattern,$haystack,$m)) {
        echo "Needle $m[1] found\n";
} else {
        echo "No needles found\n";
}

See it

答案 2 :(得分:0)

如果将所有值放在要搜索的数组中,则可以遍历该数组,直到找到字符串中的数组。

$string = "I love to eat tacos.";
$searchfor = array("brown", "lazy", "tacos");

foreach($searchfor as $v) {
  if(strpos($string, $v)) {
    //Found a word
    echo 'Found '.$v;
    break;
  }
}

这将输出:

Found tacos

这是使用区分大小写的strpos。如果您不关心案例,可以使用stripos

PHP: strpos

答案 3 :(得分:0)

你是说

吗?
<?php


function first_found(array $patterns, $string) {
    foreach ($patterns as $pattern) {
        if (preg_match($pattern, $string, $matches)) {
            return $matches;
        }
    }
}

$founded = first_found(
    array(
        '/foo/',
        '/bar/',
        '/baz/',
        '/qux/'
    ), 
    ' yep, it qux.'
);