сопоставление слова до конца строки с помощью strpos - PullRequest
5 голосов
/ 27 марта 2010

Решение: strpos оказался самым эффективным. Может быть сделано с substr, но это создает временную подстроку. Также может быть выполнено с помощью регулярных выражений, но медленнее, чем strpos, и не всегда дает правильный ответ, если слово содержит метасимволы (см. Комментарий Аймана Хури)

Выбранный ответ:

if(strlen($str) - strlen($key) == strrpos($str,$key))
    print "$str ends in $key"; // prints Oh, hi O ends in O

и лучше всего проверить на строгое равенство === (см. Ответ Дэвида)

Спасибо всем за помощь.


Я пытаюсь сопоставить слово в строке, чтобы увидеть, встречается ли оно в конце этой строки. Обычный strpos($theString, $theWord); этого бы не сделал.

В основном, если $theWord = "my word";

$theString = "hello myword";        //match
$theString = "myword hello";        //not match
$theString = "hey myword hello";    //not match

Какой самый эффективный способ сделать это?

P.S. В названии я сказал strpos, но если есть лучший способ, это тоже нормально.

Ответы [ 4 ]

6 голосов
/ 27 марта 2010

Для этого можно использовать функцию strrpos:

$str = "Oh, hi O";
$key = "O";

if(strlen($str) - strlen($key) == strrpos($str,$key))
    print "$str ends in $key"; // prints Oh, hi O ends in O

или решение на основе регулярных выражений как:

if(preg_match("#$key$#",$str)) {
 print "$str ends in $key"; // prints Oh, hi O ends in O
}
1 голос
/ 27 марта 2010

strpos может быть наиболее эффективным в некоторых случаях, но вы также можете подставить отрицательное значение в качестве второго параметра для обратного отсчета от конца строки:

$theWord = "my word";
$theWordLen = strlen($theWord);

$theString = "hello myword";
$matches = ($theWord ==substr($theString, -1 * $theWordLen);
0 голосов
/ 06 июля 2018

Почему бы просто не перевернуть строки и использовать strpos по назначению:

if(strpos(strrev($haystack), strrev($needle))===0)

Верно, что strrev испортит многобайтовые символы, но, поскольку и стог сена, и игла одинаково перепутаны, все равно работает нормально. Я сделал несколько тестов, и это быстрее, чем любой другой метод. Вероятно, потребляет больше памяти, хотя.

0 голосов
/ 27 марта 2010

Вы можете использовать регулярное выражение .

if(preg_match('/'.$theWord.'$/', $theString)) {
    //matches at the end of the string
}

Или вы можете использовать strrpos () и добавить длину слова. (strrpos - " Найти позицию последнего появления символа в строке ") Затем посмотрите, является ли это позиция последнего символа в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...