Например, у меня есть следующее:
$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 }
Я хочу искать только с конца строки $, поэтому, если значение $ array не находится в конце, ничего не произойдет, поскольку его не существует, PHP может быть любым из других значений в массиве $, поэтому я не знаю, t знать длину, на которую нужно найти значение, я имею в виду, что слово может быть повторено и разной длины .
ie: $string = 'html .... , html is fantastic , I love html';
, теперь длина слова больше, и это может быть больше.
Как найти последний только то, что длина слова?
Подход регулярного выражения может быть:
<?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
Демо: https://3v4l.org/8AYvu
однако регулярное выражение здесь не требуется:
$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://3v4l.org/0LD5i
Вы можете проверить подстроку той же длины, что и поисковый запрос, в конце строки, которую вы ищете, и посмотреть, совпадают ли они.
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; } }
Очень простой и эффективный способ достижения этого – использовать substr()
и strrpos()
для извлечения последнего слова из строки.
Затем вы можете $last_word
поиск, если $last_word
существует в $array
с функцией in_array()
.
$last_word = substr($string, strrpos($string, ' ') + 1); if (in_array($last_word, $array)) { // OK }
Попробуйте использовать фиксирующий якорь $
regex следующим образом:
$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
вы можете использовать strpos
foreach($array as $ar){ if(strpos($ar,$string) !== false){ // $ar exist in string } }
Если вы можете быть уверены, что строка $ всегда содержит человекочитаемое содержимое и поэтому разделяется пробелами, вы можете начать с взрыва строки в пробелах, а затем проверить последний элемент результирующего массива для существования в вашем списке слов.
Итак, что-то вроде этого должно получиться:
<?php $elements = explode(" ", $string); $suspect = end($elements); if(in_array($suspect, $array)){ echo "The string '".$suspect."' was found in the string."; } ?>
<?php $people = array("Peter", "Joe", "Glenn", "Cleveland"); echo current($people) . "<br>"; /* to find first value from array */ echo end($people); /* to find last value from array */ ?>