Solución: strpos
resultó ser el más eficiente. Se puede hacer con substr
pero eso crea una subcadena temporal. También se puede hacer con expresiones regulares, pero más lento que strpos y no siempre produce la respuesta correcta si la palabra contiene metacaracteres (ver el comentario de Ayman Hourieh).que coincide con una palabra al final de la cadena con strpos
respuesta elegida:
if(strlen($str) - strlen($key) == strrpos($str,$key))
print "$str ends in $key"; // prints Oh, hi O ends in O
y lo mejor para la prueba de igualdad estricta ===
(véase David respuesta)
Gracias a todos por su ayuda.
Estoy tratando de hacer coincidir una palabra en una cadena para ver si ocurre al final de esa cadena. El strpos($theString, $theWord);
habitual no haría eso.
Básicamente, si $theWord = "my word";
$theString = "hello myword"; //match
$theString = "myword hello"; //not match
$theString = "hey myword hello"; //not match
¿Cuál sería la forma más eficiente de hacerlo?
P.S. En el título dije strpos
, pero si existe una manera mejor, está bien también.
¿Qué quieres decir con "palabra"? ¿Texto delimitado por espacios? ¿La tecla "foo" coincidiría con "barfoo" o solo "bar foo"? –
@Nick, si '$ word =" foo ";' entonces ambos '$ sentence =" barfoo "o" bar foo ";' todavía deberían 'coincidir'. No es importante en este caso si tiene un espacio antes o no. – clover
posible duplicado de [¿Cuál es la prueba más eficiente de si una cadena PHP termina con otra cadena?] (Http://stackoverflow.com/questions/619610/whats-the-most-efficient-test-of-whether-a- php-string-ends-with-another-string) – Gajus