Página 1 de 1

Buscar la existencia de una palabra al final de la cadena

NotaPublicado: 2020-08-26 14:46 @657
por seafree
¿Qué tal? Buenas tardes.

Estoy buscando la existencia de and al final de una cadena $sql:

$sql="SELECT local,eq,descrip_mantto,atend,f_inicio,f_termino ,lic,edo,actividad from t_manttos tm, c_manttos cm where tm.tipo_mantto=cm.tipo_mantto and tm.local='TMD' and f_inicio::date between '2020-01-01' and '2020-07-31'";

La búsqueda la realizo de la siguiente manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  if ($sql !=~  /$and/) {
  2.         print "EXISTE";
  3.  }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


RESULTADO: Me arroja que EXISTE pero eso es falso porque la última palabra es una fecha.

Agradeceré de su gran apoyo para descubrir si la última palabra de la cadena corresponde a un "and".

Re: Buscar la existencia de una palabra al final de la caden

NotaPublicado: 2020-08-26 15:57 @706
por explorer
La línea

if ($sql !=~ /$and/) {

es muy confusa... El patrón es una variable escalar llamada $and. No estás buscando por 'and', si no por lo que contenga la variable $and.

Como supongo que $and no la tienes declarada ni definida, estará por defecto vacía. Como no usas 'use strict', Perl no te ha podido avisar de que estás cometiendo un error sintáctico.

Entonces estás buscando la cadena vacía dentro de... ¡$_! ya que lo que has escrito es esto:

if ( $sql != ~/$and/) {

O sea, es una comparación numérica entre $sql (que se convertirá en 0, por ser una cadena que no empieza por número), con el resultado de hacer la negación binaria (~) del resultado de buscar una cadena vacía en la variable $_... El resultado de la parte derecha es 18446744073709551615. Entonces, como 0 es distinto de 18446744073709551615, el resultado es positivo y por eso ves el mensaje de que existe.

En realidad, deberías haberlo escrito así:

if ($sql =~ /and$/i) {

Ahora sí estamos aplicando el operador de coincidencia entre $sql y el patrón. Y el patrón tiene un ancha ($) que marca el final de la cadena. La opción /i es para buscar tanto por mayúsculas como minúsculas.

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -E '$sql = "SELECT local,eq,descrip_mantto,atend,f_inicio,f_termino FROM t_manttos tm, c_manttos cm WHERE tm.tipo_mantto=cm.tipo_mantto AND tm.local=`TM0` and"; say "Sí" if $sql =~ /and$/i '
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Re: Buscar la existencia de una palabra al final de la caden

NotaPublicado: 2020-08-27 09:49 @451
por seafree
Correcto, explorer.
Gracias.

Re: Buscar la existencia de una palabra al final de la caden

NotaPublicado: 2020-08-27 10:13 @467
por seafree
¿Por qué si ejecuto el código desde la línea de comandos, como el ejemplo que tu envías, funciona correctamente PERO si lo inserto en el código no funciona como debería?

Gracias

Re: Buscar la existencia de una palabra al final de la caden

NotaPublicado: 2020-08-27 12:03 @544
por explorer
Crea un código mínimo que falle. Es decir, pon una cadena de prueba, y el código que lo compruebe, y lo mandas aquí.

Re: Buscar la existencia de una palabra al final de la caden

NotaPublicado: 2020-08-27 15:10 @674
por seafree
POR FIN ENCONTRÉ EL ERROR: ERA UN ESPACIO AL FINAL DE LA CADENA :(