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

问题描述 投票:0回答:6

例如我有这个:

$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';,现在这个词的长度更大,它可能比那个更大。

如何找到最后一个只有这个词的长度是多少?

php arrays regex
6个回答
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确保它是一个精确的单词匹配。 |是一个“或”。哦,$是匹配在字符串的末尾。 https://www.regular-expressions.info/anchors.html

但是:ぁzxswい

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

https://3v4l.org/8AYvu

但是:ぁzxswい


1
投票

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

$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';
}

1
投票

实现这一目标的一种非常简单有效的方法是使用https://3v4l.org/0LD5iforeach ($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; } } 从字符串中提取最后一个单词。

然后你可以用substr()函数搜索strrpos()中是否存在$last_word

$array

0
投票

尝试使用正则表达式的in_array() $last_word = substr($string, strrpos($string, ' ') + 1); if (in_array($last_word, $array)) { // OK } ,如下所示:

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; } }


0
投票

你可以使用Found PHP at the end of $string

eval.in demo

0
投票

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

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

strpos
© www.soinside.com 2019 - 2024. All rights reserved.