如何在字符串的末尾搜索文本中存在的文本?

时间:2017-10-25 16:04:20

标签: php arrays regex

例如我有这个:

$string = 'PHP is a server side web programming language , PHP is amazing , I love PHP';

$array = array('html','css','javascript','ajax','html5','css3','jquery','PHP');

foreach($array as $ar){
   //Check if one of the $array values exists in the $string
}

我只想从$ string的末尾搜索,所以如果$ array值不在最后,那么就不会发生任何事情,因为它不存在, PHP可以是任何一个$ array中的其他值因此我不知道应该找到的值的长度,我的意思是这个词可以重复并且长度不同

即:$string = 'html .... , html is fantastic , I love html';, 现在这个词的长度更大,而且可能比那个更大。

如何找到最后一个只有单词的长度?

6 个答案:

答案 0 :(得分:1)

正则表达式可能是:

<?php
$string = 'PHP is a server side web programming language , PHP is amazing , I love PHP';
$array = array('html','css','javascript','ajax','html5','css3','jquery','PHP');
$escaped_array = array_map(function($value){
    return preg_quote($value, '/');
}, $array);
$regex = '/\b(' . implode('|', $escaped_array) . ')\b$/';
preg_match($regex, $string, $match);
print_r($match);

preg_quote$array中有特殊字符而被\b|确保它是完全匹配的字词。 $是“或”。哦,$string = 'PHP is a server side web programming language , PHP is amazing , I love PHP'; $array = array('html','css','javascript','ajax','html5','css3','jquery','PHP'); $words = explode(' ', $string); if(in_array(end($words), $array)){ echo 'Matched'; } 是匹配在字符串的末尾。 https://www.regular-expressions.info/anchors.html

演示:https://3v4l.org/8AYvu

但是这里不需要正则表达式:

{{1}}

演示:https://3v4l.org/0LD5i

答案 1 :(得分:1)

实现此目的的一种非常简单有效的方法是使用substr()strrpos()从字符串中提取最后一个单词。

然后,您可以使用in_array()功能搜索$last_word中是否存在$array

$last_word = substr($string, strrpos($string, ' ') + 1);

if (in_array($last_word, $array)) {
    // OK
}

答案 2 :(得分:1)

您可以检查与您要搜索的字符串末尾的搜索字词长度相同的子字符串,看看它们是否匹配。

foreach ($array as $ar) {
    // negative number in substr will take a substring that many characters from the end
    if ($ar == substr($string, -strlen($ar))) {
        // found it.
        break;
    }
}

答案 3 :(得分:0)

尝试使用正则表达式closing anchor $,如下所示:

$string = 'PHP is a server side web programming language , PHP is amazing , I love PHP';

$array = ['html', 'css', 'javascript', 'ajax', 'html5', 'css3', 'jquery', 'PHP'];

foreach ($array as $ar) {
    // Check if one of the $array values exists in the $string
    if (preg_match("/$ar$/", $string)) {
        echo "Found $ar at the end of \$string";
        break;
    }
}

输出:

Found PHP at the end of $string

eval.in demo

答案 4 :(得分:0)

您可以使用strpos

foreach($array as $ar){
   if(strpos($ar,$string) !== false){
     // $ar exist in string 
   }
}

答案 5 :(得分:0)

如果你可以确定$ string总是包含人类可读的内容,因此用空格分隔,你可以先在空格上爆炸字符串,然后检查结果数组的最后一个元素是否存在于你的单词中列表。

所以这样的事情应该成功:

<?php
    $elements = explode(" ", $string);
    $suspect = end($elements);
    if(in_array($suspect, $array)){
        echo "The string '".$suspect."' was found in the string.";
    }
?>