You are on page 1of 12

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

Cadenas de caracteres y expresiones regulares


Introduccin
Las cadenas de caracteres o string son secuencias de caracteres que pueden ser tratadas como una unidad, asignadas a variables, pasadas como parmetros a funciones o enviadas como salida al navegador. Un string se diferencia de otro tipo de dato, porque va encerrado entre comillas dobles o simples. "Cadena entre comillas dobles" 'Cadena entre comillas simples' PHP interpreta de distinta forma las cadenas que van entre comillas dobles y las que van entre comillas simples. Los strings entre comillas dobles pueden sustituir ciertos smbolos por acciones, como la inclusin del valor de una variable. Las comillas simples, simplemente muestran todo el contenido, sin atender a caracteres especiales. Ejemplo Cadenas.php: <?php $variable = "Domingo"; $frase_l = "Hoy es $variable, el cielo est gris"; $frase_2 = Hoy es $variable, el cielo est gris; echo $frase_l; echo $frase_2; ?> El resultado en el navegador es: Hoy es Domingo, el cielo est gris Hoy es $variable, el cielo est gris Como se puede observar, la cadena $frase_1 es capaz de sustituir la variable por su valor, por el simple hecho de estar entre comillas dobles.

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

Propiedades de las cadenas


ndices de string
Si pensamos en las cadenas como una sucesin de caracteres en un orden determinado, podemos llegar a desear acceder libremente a parte de los caracteres. Esto es posible gracias a los smbolos de llave { } y un ndice numrico que se corresponder con la posicin del carcter que buscamos. El ejemplo muestra cmo crear una funcin que duplica las letras de una cadena aprovechando esta forma de acceder a los caracteres. Ejemplo Cadenas_Duplicar.php: <?php function duplicar_caracteres($cadena){ $numero = strlen($cadena); $cadena_auxiliar = ""; for($x=0; $x<$numero; $x++){ $cadena_auxiliar = $cadena_auxiliar . $cadena{$x}; } return $cadena_auxiliar; } $cadena = "Duplicar las letras"; echo duplicar_caracteres($cadena); ?> El resultado en el navegador es: Duplicar las letras

Operadores
Para concatenar varias cadenas utilizaremos el operador punto (.) Ejemplo Cadenas_Concatenar.php: <?php $cadenal = "Hola"; $cadena2 = "Mundo"; $cadena3 = "Qu tpico!"; $supercadena = $cadenal . " " . $cadena2 . " " . $cadena3; echo $supercadena; ?> Es fcil intuir que el operador puede concatenar caracteres y variables de tipo string de forma conjunta. Es posible que desee ahora aadir texto a una cadena ya existente; esto se puede hacer de dos formas muy similares. La primera es asignando a la variable su valor ms el valor a aadir, de la siguiente forma:

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

<?php $cadenal = "Hola"; $cadena2 = "Mundo"; $cadenal = $cadenal ." ". $cadena2; echo $cadenal; ?> O utilizando el operador de concatenacin y asignacin (.=), como en el ejemplo: <?php $cadenal = "Hola"; $cadena2 = "Mundo"; $cadenal .= " ".$cadena2; echo $cadenal; ?>

Sintaxis para mltiples lneas


Existe en PHP una forma ms de introducir cadenas, aparte de las comillas, muy recomendable para largos textos o un considerable conjunto de etiquetas HTML. La sintaxis es muy sencilla y comienza con el operador (<<<) seguido de una etiqueta que indica el principio del texto. Despus de esto podemos escribir un conjunto de caracteres muy numerosos y, para finalizar, la etiqueta de fin. Ejemplo Cadenas_Multiples.php: <?php print<<<INICIO <form> <input type="text" name="Nombre" value="Maria Puig"> <br> <input type="submit" name="submit" value="Enviar"> </form> INICIO; ?> Siempre debe comenzar por el operador (<<<), seguido de un identificador, por ejemplo INICIO. Despus se incluye el texto, en este caso un formulario y, para finalizar, la misma etiqueta de inicio. El navegador nos mostrar el formulario.

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

Funciones de string
Tamao de la cadena
La funcin strlen(cadena) devuelve como resultado el tamao en caracteres de la cadena que pasemos de parmetro. Este valor puede asignarse a una variable, como indica el ejemplo. Ejemplo Cadenas_Strlen.php: <?php $cadena = "Esta cadena tiene muchas letras"; $numero_letras = strlen($cadena); echo "La cadena tiene $numero_letras caracteres"; ?> El resultado en el navegador es: La cadena tiene 31 caracteres

Posicin de los caracteres


La funcin strpos(cadena, carcter) encuentra en un string la posicin de un carcter determinado. Ejemplo Cadenas_Strpos.php: <?php $cadena = "Esta cadena tiene muchas letras"; echo "La primera aparicin de 'a' es " . strpos($cadena, "a")."<br>"; echo "La primera aparicin de 'm' es " . strpos($cadena, "m")." <br>"; echo "La primera aparicin de 'E' es " . strpos($cadena, "E")." <br>"; ?> El resultado por pantalla es: La primera aparicin de 'a' es 3 La primera aparicin de 'm' es 18 La primera aparicin de 'E' es 0 Si strpos() se utiliza para averiguar la posicin de la primera "E" mayscula de $cadena vemos que nos devuelve un 0; esto es as porque el ndice de caracteres comienza en 0. Si no se encuentra ninguna ocurrencia del carcter buscado el resultado ser vaco.

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

La funcin strpos() tambin puede utilizarse para buscar varios caracteres seguidos en una misma cadena: <?php $cadena = "Esta cadena tiene muchas letras"; echo "La primera aparicin de 'tiene' es " . strpos($cadena, "tiene")."<br>"; ?> El resultado por pantalla es: La primera aparicin de 'tiene' es 12 Si lo que nos interesa es encontrar caracteres buscando desde el final de la cadena la funcin que tenemos que utilizar es strrpos(cadena, carcter) (la letra r que se aade viene del ingls reverse). El ejemplo anterior nos sirve para comprobar el funcionamiento de la funcin: <?php $cadena = "Esta cadena tiene muchas letras"; echo "La primera aparicin de 'a' es " "a")."<br>"; echo "La primera aparicin desde atrs strrpos($cadena, "a")."<br>"; ?> El resultado por pantalla es: La primera aparicin de 'a' es 3 La primera aparicin desde atrs de 'a' es 29

. de

strpos($cadena, 'a' es " .

Comparacin de cadenas
El operador (==) nos puede servir para evaluar si dos cadenas de caracteres son iguales dentro de una estructura de control. Adems, tenemos la funcin strcmp(cadena1, cadena2), que compara bit a bit dos cadenas de caracteres. Atendiendo al valor de salida de la funcin, podemos obtener los siguientes resultados:

Si el valor que se obtiene es 0, las dos cadenas son exactamente igual. Si obtenemos un valor negativo, el primer string es ms pequeo que el segundo. Si obtenemos un valor positivo, el primer string es ms grande que el segundo.

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

Ejemplo Cadenas_Strcmp.php: <?php $cadenal = "Prueba"; $cadena2 = "Prueba"; if (strcmp($cadenal,$cadena2) == 0){ echo "Las dos cadenas son iguales"; }elseif (strcmp($cadenal,$cadena2) < 0){ echo "La cadenal es menor que la cadena2"; }else{ echo "La cadenal es mayor que la cadena2"; } ?> El resultado por pantalla es: Las dos cadenas son iguales Nos da este resultado porque las dos cadenas son exactamente iguales. Si una cadena estuviese en maysculas y la otra en minsculas, no nos habra dado ste resultado. Para evitar este problema podemos utilizar la funcin strcasecmp(cadena1, cadena2), que no es sensible a maysculas. As strcasecmp("HoLa" , "hOlA") da como resultado 0, es decir, las dos cadenas son iguales. <?php $cadenal = "HoLa"; $cadena2 = "hOlA"; if (strcasecmp($cadenal,$cadena2) == 0){ echo "Las dos cadenas son iguales"; }elseif (strcasecmp($cadenal,$cadena2) < 0){ echo "La cadenal es menor que la cadena2"; }else{ echo "La cadenal es mayor que la cadena2"; } ?>

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

Bsqueda de caracteres
La funcin strstr(cadena, fragmento) recibe como parmetros una cadena de caracteres donde buscar y otra con un conjunto de caracteres que queremos encontrar. Si se encuentra el patrn de bsqueda, el resultado ser una cadena de caracteres que comenzar justo en el patrn, hasta el final del string primero. Si no se encuentra el patrn el resultado ser false. Ejemplo Cadenas_Strstr.php: <?php $texto = "Esta cadena tiene muchas letras"; echo "La primera aparicin de 'cadena' strstr($texto,"cadena")."<br>"; ?> El resultado por pantalla es: La primera aparicin de 'cadena' es: cadena tiene muchas letras

es:

"

Seleccin de subcadenas
La funcin substr() permite seleccionar un conjunto de caracteres de una cadena, quedando intacto el string original. Puede tomar varios parmetros:

substr(cadena, ndice): Cadena es el conjunto de caracteres que queremos cortar e ndice la posicin a partir de la cual se cortar la cadena hasta el final. substr(cadena, ndice, nmero): Cadena es el conjunto de caracteres que queremos cortar e ndice la posicin a partir de la cual se cortar la cadena tantas posiciones como indique el nmero.

Ejemplo Cadenas_Substr.php: <?php $cadena = "Esta cadena tiene muchas letras"; echo "<h4>Devuelve la cadena completa</h4>"; echo substr($cadena, 0) ."<br>"; echo "<h4>Devuelve desde el carcter 12 hasta el final</h4>"; echo substr($cadena, 12) ."<br>"; echo "<h4>Devuelve 6 caracteres desde el carcter 18</h4>"; echo substr($cadena, 18, 6) ."<br>"; echo "<h4>Devuelve los 6 ltimos caracteres</h4>"; echo substr($cadena, -6) ."<br>"; echo "<h4>Devuelve desde la posicin 26, contando desde atrs, 6 caracteres</h4>"; echo substr($cadena, -26, 6) ."<br>";

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

echo "<h4>Devuelve empezando en el carcter 4 y terminando en el 7 desde atrs</h4>"; echo substr($cadena, 4, -7); ?> El resultado por pantalla es: Devuelve la cadena completa Esta cadena tiene muchas letras Devuelve desde el carcter 12 hasta el final tiene muchas letras Devuelve 6 caracteres desde el carcter 18 muchas Devuelve los 6 ltimos caracteres letras Devuelve desde la posicin 26, contando desde atrs, 6 caracteres cadena Devuelve empezando en el carcter 4 y terminando en el 7 desde atrs cadena tiene muchas Recuerda que la variable $cadena queda intacta. Dependiendo de la posicin del nmero negativo, substr() actuar de una forma u otra. Algunas respuestas de la funcin substr(). Ejemplo substr("Hola", 2) substr("Hola", -2) substr("Hola", 1, 3) substr("Hola", -3, 2) substr("Hola", 2, -1) substr("Hola", -2, -3) Resultado Devuelve la cadena completa empezando por el carcter 2. Devuelve la cadena completa empezando por el carcter 2, esta vez empezando a contar desde atrs. El resultado son 3 caracteres empezando desde el carcter 1. Dos caracteres, empezando desde el carcter 3 contando desde la ltima letra. Devuelve un conjunto de caracteres que estn desde la posicin 2 a la posicin 1 comenzando desde atrs. No tiene aplicacin posible.

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

Funciones de limpieza de cadenas


Sirven para limpiar espacios en blanco al principio de la cadena, al final o en cualquier parte desde el principio al final.

ltrim(cadena, lista_carcteres)

Elimina el espacio en blanco (o ms caracteres) del principio de una cadena. La funcin devuelve una cadena con los espacios en blanco eliminados del principio de la cadena indicada en el parmetro. Si no se emplea el segundo parmetro (lista_caracteres), la funcin ltrim() elimina los siguientes caracteres:

" " (ASCII 32 (0x20)), un espacio en blanco. "\t" (ASCII 9 (0x09)), un tabulador. "\n" (ASCII 10 (0x0A)), una nueva linea. "\r" (ASCII 13 (0x0D)), un retorno de carro.

Ejemplo Cadenas_Ltrim.php: <?php $texto = "\t\tEn un lugar de la Mancha :) ... "; echo La cadena es: $texto y su longitud es: strlen($texto)."<br>"; $texto_limpio = ltrim($texto); echo La cadena es: $texto_limpio y su longitud es: strlen($texto_limpio)."<br>"; $texto_limpio = ltrim($texto, "\t"); echo La cadena es: $texto_limpio y su longitud es: strlen($texto_limpio)."<br>"; ?> El resultado es: La cadena es: En un lugar de la Mancha :) ... y su longitud es: 36 La cadena es: En un lugar de la Mancha :) ... y su longitud es: 33 La cadena es: En un lugar de la Mancha :) ... y su longitud es: 34

. . .

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

rtrim(cadena, lista_carcteres)

Elimina el espacio en blanco (o ms caracteres) del final de una cadena. Funciona igual que el ltrim(). Ejemplo Cadenas_Rtrim.php: <?php $texto = "\t\tEn un lugar de la Mancha :) ... "; echo "La cadena es: $texto y su longitud strlen($texto)."<br>"; $texto_limpio = rtrim($texto); echo "La cadena es: $texto_limpio strlen($texto_limpio)."<br>"; $texto_limpio = rtrim($texto, "\t"); echo "La cadena es: $texto_limpio strlen($texto_limpio)."<br>"; ?> El resultado es: La cadena es: En un lugar de la Mancha :) ... y su longitud es: 35 La cadena es: En un lugar de la Mancha :) ... y su longitud es: 33 La cadena es: En un lugar de la Mancha :) ... y su longitud es: 35 y su longitud

es:

".

es:

".

su

longitud

es:

".

trim(cadena, lista_carcteres)

Elimina espacios en blanco (u otros caracteres) del principio y final de una cadena. Ejemplo Cadenas_Trim.php: <?php $texto = "\t\tEn un lugar de la Mancha :) ... "; echo "La cadena entera es: $texto y su ".strlen($texto)."<br>";

longitud

es:

$texto_final=trim($texto); echo "La cadena haciendo un trim es: $texto_final y su longitud es: ".strlen($texto_final)."<br>"; $texto_final_2=trim($texto, " \t."); echo "La cadena haciendo un trim especificando los caracteres: espacio \t y punto: ".$texto_final_2."<br>"; echo "Su longitud es: ".strlen($texto_final_2)."<br>"; ?>

10

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

El resultado es: La cadena entera es: En longitud es: 35 La cadena haciendo un trim su longitud es: 31 La cadena haciendo un trim y punto: En un lugar de la Su longitud es: 27 Ejemplo Cadenas_Limpiar.php: <?php $cadena = " cadena con varios espacios en blanco "; echo $cadena . ". Su longitud es: " . strlen($cadena). "<br>"; echo ltrim($cadena) . ". Su longitud es: " . strlen(ltrim($cadena)). "<br>"; echo rtrim($cadena) . ". Su longitud es: " . strlen(rtrim($cadena)). "<br>"; echo trim($cadena) . ". Su longitud es: " . strlen(trim($cadena)); ?> Cada lnea realiza una de las operaciones vistas, e imprime el resultado de la cadena en el navegador junto con el tamao de la cadena. El resultado por pantalla es: cadena cadena cadena cadena con con con con varios varios varios varios espacios espacios espacios espacios en en en en blanco . Su longitud es: 38 blanco . Su longitud es: 37 blanco. Su longitud es: 37 blanco. Su longitud es: 36 un lugar de la Mancha :) ... y su es: En un lugar de la Mancha :) ... y especificando los caracteres: espacio Mancha :)

Sustitucin de cadenas
La funcin str_replace(buscar, reemplazar, cadena) toma como parmetros un conjunto de caracteres a buscar, un grupo que debe sustituirse por el anterior y una cadena de caracteres sobre la que actuar. Ejemplo Cadenas_Str_replace.php: <?php $cadena = "Esta cadena tiene muchas letras"; $cadena = str_replace("Esta", "Este", $cadena); echo str_replace("cadena", "conjunto", $cadena); ?> El resultado por pantalla es: Este conjunto tiene muchas letras Si en la cadena existiera ms de una instancia del conjunto buscado, todas las ocurrencias quedaran cambiadas.

11

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

<?php $cadena = "Esta cadena tiene muchas letras y cadenas"; $cadena = str_replace("Esta","Este",$cadena); echo str_replace("cadena","conjunto",$cadena); ?> El resultado por pantalla es: Este conjunto tiene muchas letras y conjuntos

Funciones de mayscula y minscula


Las funciones strtolower(cadena) y strtoupper(cadena) devuelven la cadena que se pasa como argumento, completamente en minscula o mayscula respectivamente. Ejemplo Cadenas_MayMin.php: <?php $cadena = "Hay palabras en MAYSCULAS y en minsculas<br>"; echo strtolower($cadena); echo strtoupper($cadena); ?> El resultado es: hay palabras en maysculas y en minsculas HAY PALABRAS EN MAYSCULAS Y EN MINSCULAS Si lo que realmente nos interesa es que la primera letra de un texto aparezca como letra Capital o, que letras iniciales de cada palabra en una frase aparezcan en mayscula, tenemos las funciones ucfirst(cadena) y ucwords(cadena). <?php $cadena = "haba una vez...<br>"; echo ucfirst($cadena); $cadena2 = "linux user group"; echo "LUG significa " . ucwords($cadena2) ; ?> El resultado es: Haba una vez... LUG significa Linux User Group

12