解决方案:
strpos
证明效率最高。可以使用substr
完成,但会创建一个临时子字符串。也可以用正则表达式完成,但比strpos慢,如果单词包含元字符,并不总是产生正确的答案(参见Ayman Hourieh评论)。
选择答案:
if(strlen($str) - strlen($key) == strrpos($str,$key))
print "$str ends in $key"; // prints Oh, hi O ends in O
最好测试严格的平等===
(参见David回答)
感谢所有人的帮助。
我正在尝试匹配字符串中的单词以查看它是否出现在该字符串的末尾。通常的strpos($theString, $theWord);
不会这样做。
基本上是$theWord = "my word";
$theString = "hello myword"; //match
$theString = "myword hello"; //not match
$theString = "hey myword hello"; //not match
最有效的方法是什么?
P.S。在标题中我说strpos
,但如果存在更好的方法,那也没关系。
答案 0 :(得分:6)
您可以使用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 :(得分:1)
strpos可能是效率最高的,但您也可以使用负值作为第二个参数来从字符串末尾向后计数:
$theWord = "my word";
$theWordLen = strlen($theWord);
$theString = "hello myword";
$matches = ($theWord ==substr($theString, -1 * $theWordLen);
答案 2 :(得分:0)
您可以使用regular expression。
if(preg_match('/'.$theWord.'$/', $theString)) {
//matches at the end of the string
}
或者您可以使用strrpos()并添加单词的长度。 (strrpos - “查找字符串中最后一次出现的位置”)然后查看这是否是字符串中最后一个字符的位置。
答案 3 :(得分:0)
为什么不反转字符串并按预期使用strpos:
if(strpos(strrev($haystack), strrev($needle))===0)
确实,strrev会弄乱多字节字符,但是由于干草堆和needle都被弄乱了,所以仍然可以正常工作。我做了一些测试,这比任何其他方法都快。虽然可能会消耗更多的内存。