duduromeroa.com

Programación web

Ejemplos de sintaxis PHP con funciones incorporadas (parte 3): strpos(), strrpos(), strstr(), strrchr(), strspn(), parse_url(), expresiones regulares, entre otros.


www.duduromeroa.com, animación, lector, gif

Por Eduardo Romero

Guayaquil, Ecuador

Contacto duduromeroa@gmail.com

#Guayaquil, #PHP, #funcionesIncorporadas, #duduromeroa


ATENCIÓN: Los conceptos a continuación requieren de conocimiento previo en fundamentos de programación. Reseñas de otros lenguajes de programación se hallan en este vínculo.



Funciones incorporadas para ubicar caracteres: strpos(), strrpos(), strstr(), strchr(), strspn(), strcspn()

En la sección anterior revisamos funciones en PHP para detectar y extraer porciones de caracteres desde una línea de caracteres (o dicho de otro modo, desde un string).

Ahora revisaremos funciones de PHP para detectar y ubicar la presencia o no de caracteres desde un conjunto de strings. Se aclara que todas las funciones a revisar retornarán false si no hallan el caracter buscado.

Hallar la primera ocurrencia de caracter con strpos()

Halla la primera ocurrencia (es decir, halla el primer caracter y su índice de posición) a partir de un string.

En .PHP

<?php 

// String inicia en índice cero
$nombreCalle = "Avenida 9 de Octubre";

// Buscar el PRIMER caracter e
$pos = strpos($nombreCalle, "e");

// Ojo con el uso de corchetes
echo("el primer número está en el índice {$pos}");
// el primer número está en el índice 2

?>

Hallar la última ocurrencia de caracter con strrpos()

Halla la última ocurrencia a partir de un string.

En .PHP

<?php 

// String inicia en índice cero
$nombreCalle = "Avenida 9 de Octubre";

// Buscar el ÚLTIMA caracter 'e'
$pos = strrpos($nombreCalle, "e");

// Ojo con el uso de corchetes
echo("el primer número está en el índice {$pos}");
// el primer número está en el índice 19

?>

Hallar la primera ocurrencia de caracter y todos los que le siguen, con strstr()

Halla la primera ocurrencia de un caracter y devuelve todos los caracteres que le siguen (desde el primer caracter hallado en adelante). Así mismo, la función stristr() indicará que no habrá discriminará la búsqueda entre mayúsculas o minúsculas.

En .PHP

<?php 

// String inicia en índice cero
$nombreCalle = "Avenida 9 de Octubre";

// Buscar el ÚLTIMA caracter 'e'
// IMPORTANTE Si ES EN MAYÚSCULA O MINÚSCULA
$pos = strstr($nombreCalle, "e");

// Ojo con el uso de corchetes
echo("El texto que le sigue a la primeta letra 'e' es: {$pos}");
// El texto que le sigue a la primeta letra 'e' es: enida 9 de Octubre

echo "
"; // FUNCIÓN stristr() // Aplica búsqueda sea en mayúscula o minúscula // NO IMPORTA si es en mayúscula o minúscula $sea_Mayuscula_o_Minuscula = stristr($nombreCalle, "e"); echo $sea_Mayuscula_o_Minuscula; // enida 9 de Octubre ?>

Hallar la última ocurrencia de caracter y todos los que le siguen, con strrchr()

Halla la última ocurrencia de un caracter y devuelve todos los caracteres que le siguen (desde el último caracter hallado en adelante). OJO: discrimina caracteres mayúsculas o minúsculas.

En .PHP

<?php 
$frase = "Guayaquil Ecuador";
$pos = strrchr($frase, "a");
echo("El texto anexo a la última 'a' es: {$pos}");
// El texto anexo a la última 'a' es: ador
?>

El muy raro conteo de la función strspn()

Admito que esta función me mareó por unos minutos. strspn() cuenta los caracteres en común (no cuenta el índice, que se contaría desde el cero en adelante).

Primero se indica un string inicial. Luego, un string de caracteres permitidos cuya cantidad de apariciones será contabilizada a partir del string inicial. Todo eso desde la función strspn().

Luego, inicia el conteo de cada caracter en común y siempre al inicio del string inicial; pero cuando aparece un caracter NO COMÚN, la función detiene el conteo. Luego, la función devuelve solo el número de caracteres comunes.

Pero ojo aquí: si la función haya un primer caracter que no está en el string inicial, EL CONTEO SE DETENDRÁ. Y el resultado será CERO.

Funciones como strspn() permiten, por ejemplo, validar que los tipos de datos de un registro sean los que se piden. En el ejemplo de abajo, se usa la función strlen() que devuelve la longitud total de la cadena (el número de caracteres).

En .PHP

<?php 

// String inicial
$cadena = "hello123";

// String con caracteres cuya recurrencia AL INICIO será contabilizada
// Si el primer caracter no es 'h', todo se detiene y da cero
$permitidos = "hel";

echo strspn($cadena, $permitidos);
echo "<hr>";
// 4

/* CONTEO:
h ... 1
e ... 2
l ... 3
l ... 4
*/

// NUEVO EJEMPLO: VALIDAR REGISTROS
$entrada = "123";
$permitidos = "12abc"; 
// Solo dígitos permitidos

if (strspn($entrada, $permitidos) == strlen($entrada)) {
    echo "La entrada es válida.";
} else {
    echo "La entrada contiene caracteres no permitidos.";
}
// La entrada contiene caracteres no permitidos.

?>

Descomponer URLs con parse_url()

Devuelve un arreglo con los elementos de una URL:

En .PHP

<?php 

  $ruta = parse_url("https://duduromeroa.com/infografias/impresas");
  print_r($ruta);

  // Resultado:
  /*
  Array ( 
  [scheme] => http 
  [host] => duduromeroa.com 
  [path] => /infografias/impresas
  ) 
  */

?>

Expresiones regulares con el muy versátil preg_match()

Las expresiones regulares o regex hallan caracteres y sus coincidencias (o, detecta que no las hay).

Una vez obtenidas esas coincidencias podremos alterarlas, sustituirlas o extraerlas por porciones. Por ejemplo, si deseamos hallar la expresión 'quil' en la palabra 'Guayaquil', entonces diremos que sí hay una ocurrencia de ese grupo de letras. La expresiones regulares usan metacaracteres (o lo que es lo mismo decir, sintaxis de código) para indicar qué grupo de caracteres necesitamos comparar en una palabra o frase.

A continuación una tabla explicando cada metacaracter y su uso en la sintaxis de regex:

Signo y uso

/ /

Barras inclinadas dobles: Delimita la expresión regular. Modo de uso: solo indica que entre esas barras solo se ubicará la sintaxis de una expresión regular.

|

Barra vertical. Indica condición del Ó booleano (este ó este) para sumar regex entre sí.

.

Punto. Coincide con cualquier carácter excepto nueva línea (\n).

\d

Indica que el/los siguientes caracteres después de \d serán uno o más dígitos (números) que deberán activar alguna coincidencia.


^

Indica que la búsqueda de la coincidencia debe iniciar al inicio de la cadena de caracteres. Pero en caso de existir un punto luego de metacaracter ^, entonces se buscará al -inicio del string dado- cualquier caracter; y luego, los caracteres con los que se pide coincidencia.

$

Indica que la búsqueda debe iniciar desde el final de la cadena de caracteres o antes que la cadena finalice. También indica que la sintaxis de regex debe ser leída hasta esa ubicación de la sintaxis.

\

Indica que el siguiente caracter será tratado como un símbolo literal, y no como una sintaxis RegEx.

()

Agrupa las partes de una expresión regular compuesta.

[]

Indica que alguno de esos caracteres dentro de los corchetes deberían activar una o más coincidencias. Si la regex halla alguna, la expresión devolverá true.

{}

Especifica la cantidad de repeticiones (o el rango de repeticiones) en una cantidad de números.

+

Coincide con una o más repeticiones de un carácter indicado en la regex.

?

Metacaracter de opcionalidad. Ejemplo de uso: /color(es)?/ –donde se pide hallar una coincidencia con la palabra 'color', aunque termine o no en 'es'–. En otro ejemplo especial, la expresión /col?r/ podrá coincidir con una referencia, ya sea si en esa referencia existe o no la letra que precede al signo.

-

Signo -, usado entre corchetes rectos, define un rango de coincidencia entre valores (numéricos y/o alfanuméricos).

i

Signo i, indica que las coincidencias no serán sensibles con minúsculas o mayúsculas.



Luego de lo anterior, expongo ejemplos de uso mediante sintaxis PHP:


Ejemplos de uso mediante código PHP

Uso de metacaracter //

Indica que entre las barras estará la porción de caracteres que coincidirá o no con el string; sea al inicio, en medio o al final del string indicado.

En .PHP

<?php

echo preg_match("/me/", "me gusta el ceviche con chifles"); 
// true

echo preg_match("/gusta/", "me gusta el ceviche con chifles"); 
// true

echo preg_match("/el /", "me gusta el ceviche con chifles"); 
// true

echo preg_match("/fles/", "me gusta el ceviche con chifles"); 
// true

// + + + + + 

echo preg_match("/megus/", "me gusta el ceviche con chifles"); 
// false

echo preg_match("/gusta/", "..."); 
// false

echo preg_match("/elceviche/", "me gusta el ceviche con chifles"); 
// false

echo preg_match("/flez/", "me gusta el ceviche con chifles"); 
// false 

?>

Abajo, ejemplo de uso de comillas dobles o simples y uso de diagonales al momento de identificar una coincidencia, o para convertir un metacaracter a un caracter literal simple (acción llamada como escapar):

En .PHP

<?php 

/* Se pide identificar la presencia del signo $ 
seguido de unos valores dados. */ 

// En comillas dobles:
// Se usa doble diagonal invertida para primero:
  // - Convertir (escapar) el metacaracter $ a un literal común
  // - Establecer la porción de coincidencia
echo preg_match("/\\$15.00/", "Préstame $15.00 porfi"); 
// 1 (true)

// + + + 

// En comillas simples:
  // - Solo escapar el signo $ con una sola diagonal 
echo preg_match('/\$5.00/', 'Préstame $5.00 porfi'); 
// 1 (true)

// + + + 

// En comillas simples:
  // - Solo escapar el signo $ con una sola diagonal 
echo preg_match('/\$5.00/', 'Préstame $15.00 porfi'); 
// 0 (false) No existe esa cantidad

?>    

Ejemplo con metacaracter de barra vertical recta: |

En .PHP

<?php 
      // Cadena de referencia
      $cadena = "Tengo un gato";

      /* Cualquiera de las palabras exactas 'gato ó perro'
      darán coincidencia */
      // CUIDADO: No separar palabras con la barra
      if (preg_match("/gato|perro/", $cadena)) {
      echo "Coincide con 'gato' o 'perro'.";
      }
      // Coincide con 'gato' o 'perro'.

      echo "<hr>";

      // ---
      // Para indicar coincidencia de iniciales en palabras
      // El * dice 'toda palabra que '
      if (preg_match("/t.*|g.*/", $cadena)) {
      echo "Coincide con alguna palabra que inicie con 't' o 'g'.";
      }
      ?>    

Ejemplo, abajo: Metacaracter punto ....pero ojo, que la coincidencia será sensible letras mayúsculas o minúsculas.

En .PHP

<?php 
    // Referencia
    $cadena = "xxxchatxxx";

    /* Lo siguiente activará una coindidencia si:
    - El string inicia con 'at'
    - El string  termina con 'at'
    - El string  tiene 'at' dentro de la palabra
    */
    if (preg_match("/.at/", $cadena)) {
    echo "Contiene 'at' al inicio, al final, o dentro de la palabra.";
    }
    // Contiene 'at' al inicio, al final, o dentro de la palabra.
  ?>
  

Así mismo, puede ser aplicado para hallar la presencia de una primera letra indicada, luego hallar cualquier letra, y después una segunda letra indicada:

En .PHP

<?php
/* Buscará la letra 'M' mayúscula, 
luego cualquier otra letra, 
y luego la letra 'l' minúscula */
echo preg_match("/M.l/", "Malecón 2000"); 
/* 1 - true (sí existe al inicio la mayúscula M, 
luego cualquier letra, 
y finalmente la minúscula 'l'), */

echo preg_match("/m.L/", "Malecón"); 
// 0 - false (no conciden mayúsculas o minúsculas)

echo preg_match("/c.t/", "ct"); 
// 0 - false (no existe cualquier letra entre 'ct')
?>

Abajo: metacaracter \d

En .PHP

<?php 

    // Referencia
    $cadena = "El código es 12345";

    /* Si la función halla 'algo' (o sea, no es null) 
    devolverá 1, que es igual a TRUE */
    // Ojo: mira cómo luego de la condición se agregó el otro argumento
    if (preg_match("/\d{4}/", $cadena)) {
    echo "Se encontró una secuencia de 4 dígitos.";
    } else {
    echo "No se encontró una secuencia de al menos 4 dígitos.";
    }
    // Se encontró una secuencia de 4 dígitos.

    ?>     

Abajo: metacaracter ^. Este metacaracter es comúmnente usado con la función preg_match(). Donde devolverá el valor 1 –true- si halla una coincidencia, ó devolverá el valor 0 –false– si no la halla, ó si la sintaxis es incorrecta. Por otro lado, si el metacaracter ^ antecede a un punto, como en la forma preg_match("/^.abc/", $string); eso indicará que primero buscará cualquier caracter y luego las letras 'abc'.

En .PHP

<?php 

$cadena = "Hola, mundo";
$patron = "/^Hola/"; 
// Busca si "Hola" está al inicio de la cadena

// Existen coincidencias en algún argumento?
if (preg_match($patron, $cadena)) {
echo "La cadena comienza con 'Hola'.";
} else {
echo "La cadena NO comienza con 'Hola'.";
}
// La cadena comienza con 'Hola'

// + + + + 

$cadena = "encebollado con pan";
$buscar = preg_match("/^ence/", $cadena); 
echo $buscar;
// Devuelve 1 (true), porque "ence" está al inicio de 

// + + + + 

$cadena = "encebollado con pan";
$buscar = preg_match("/^.ence/", $cadena); 

echo $buscar;
/* Devuelve 0 (false), porque no 
halló ninguna otra letra al inicio 
de 'encebollado' */

?> 

Otras funciones que aprovechan el metacaracter ^ son: preg_replace(), y preg_grep(), revisadas a continuación. En el segundo ejemplo de código, la función print_r() que devuelve la estructura de los datos; en este caso, de un arreglo.

En .PHP

<?php 
 // Metacaracter ^ con reg_replace()
// Se pide reemplazar solo los dígitos por la palabra 'mono'
$cadena = "2025Guayaco";
$modificado = preg_replace("/^\d+/", "Mono-", $cadena);
echo $modificado;
// Mono-Guayaco

// + + + + 

// Metacaracter ^ con preg_grep()
/* Pide hallar coincidencias al inicio 
de toda palabra que INICIE con las letras 'ma'*/ 
$lista = ["eduardo", "ediciones", "ciencias"];
$resultado = preg_grep("/^ed/", $lista);
print_r($resultado); 

/* DEVUELVE:
([0] => eduardo [1] => ediciones)
*/
?> 

Finalmente, el metacaracter ^ sirve para negar una coincidencia. Es decir, para indicar que la coincidencia NO DEBE contener ciertos rangos de caracteres dados. Sólo si no lo contiene, entonces el resultado será true.

En .PHP

<?php 
// Hallar coincidencia que inicie con 'g', 
// luego con cualquier letra QUE NO SEA aeiou, 
// y luego le siga una 'a'
echo preg_match("/g[^aeiou]a/", "soy guayaco"); 
// false –aunque se halle 'gua', la 'u' SÍ pertenece al rango [aeiou]

echo preg_match("/g[^aeiou]a/", "soy gxayaco"); 
// true –aunque se halle 'gxa', la 'x' NO pertenece al rango [aeiou]
?> 

Abajo: metacaracter $

En .PHP

<?php 

    // Referencia
    $cadena = "Hola, mundo";

    // Si halla algo, será 1 (true)
    // Podría haber sido /\.$/ (buscar un punto al final)
    // Podría haber sido /\s$/ (buscar un espacio en blanco al final)
    // Podría haber sido /@gmail\.com$/ (buscar @gmail.com al final)

    if (preg_match("/mundo$/", $cadena)) {
    echo "La cadena termina con 'mundo'.";

    // si no, será cero (false)
    } else {
    echo "La cadena NO termina con 'mundo'.";
    }
    // Existe al menos una cadena que termina con 'mundo'.

    // Si hubiera sido "Hola, mundo " (con espacio al final)...
    // ..no hubiera coincidencia.

    ?>   

Abajo: metacaracter \

En .PHP

<?php 

$cadena = "El precio es de 50$.";
$patron = "/\$/"; 
// Se usa \ para escapar el $
// es decir, para indicar que el signo $ es un caracter más

if (preg_match($patron, $cadena)) {
echo "Se encontró el signo de dólar en la cadena.";
} else {
echo "No se encontró el signo de dólar en la cadena.";
}

?> 

Abajo: metacaracter (), útil para agrupar coincidencias –también llamados subpatrones–.

En .PHP

<?php 

  // Cadena de referencia
  $cadena = "Hola Mundo";

  // Expresión regular que agrupa "Hola" y "Mundo"
  if (preg_match("/(Hola) (Mundo)/", $cadena, $coincidencias)) {
  echo "Coincidencia encontrada: " . $coincidencias[0] . "\n";
  echo "Primer grupo: " . $coincidencias[1] . "\n"; 

  // "Hola"
  echo "Segundo grupo: " . $coincidencias[2] . "\n"; 
  // "Mundo"
  } else {
  echo "No se encontró coincidencia.";
  }

  // + + + + 

  /* 
  - Busca coincidencias exactas donde 
  primero aparezca la letra "s"
  - Seguida sí o sí por una o más veces 
  por la palabra "perla " (con espacio), 
  - Seguida sí o sí por "que surgiste". 
  */
  echo preg_match("/s (perla )+que surgiste/", 
    "Eres perla que surgiste"); 
  // true

?>  

Abajo: el metacaracter [] puede ser usado también anteponiendo caracteres que identifiquen coincidencias al inicio, en medio y al final de un string dado. Recordar que los corchetes [] indican algo similar a 'cualquiera de estos caracteres, pero solo uno de ellos':

En .PHP

<?php 

// USO COMÚN
$cadena = "Hola, cómo estás?";  
// Usamos preg_match para encontrar al menos una vocal en la cadena
// Ojo con los corchetes rectos
if (preg_match("/[aeiou]/", $cadena)) {  
echo "Se encontró al menos una vocal en la cadena.";  
} else {  
echo "No se encontraron vocales.";  
}

// + + + +

/* OJO. La porción [aeiou] significa 
que sólo tomará UNA SOLO CARACTER de ese conjunto */

// Hallar coindicencia con cualquier porción de string si:
  // La primera letra es 'G' mayúscula
  // la segunda, cualquiera (una sola letra) entre [aeiou]
  // La tercera letra es 'a' minúscula
echo preg_match("/G[aeiou]a/", "Mi Guayaquil querido"); 
// true –si lo anterior se cumple–

// + + + +

// La primera letra es 'c' minúscula
  // la segunda, cualquiera entre [aeiou]
  // La tercera letra es 'ma' minúscula
echo preg_match("/c[aeiou]ma/", "Ceviche de camarón"); 
// true –si lo anterior se cumple–

// + + + +

// La primera letra es 'g' minúscula
  // la segunda, cualquiera entre [aeiou]
  // La tercera letra es 'a' minúscula
echo preg_match("/g[aeiou]a/", "Viva Quito"); 
// false -nada se cumple-

// + + + +

// La primera letra es 'a' minúscula
  // la segunda, cualquiera entre [bcdef]
  // La tercera letra es 'g' minúscula
echo preg_match("/a[bcdef]g/", "abcdefg"); 
// false –nada se cumple–

// Pues si bien el string inicia con 'a'...
// y luego le sigue una 'b'...
// pero le siguen otras letras hasta llegar a la 'g'

// + + + +

// Aquí sí hallará la coincidencoa
echo preg_match("/a[bcdef]g/", "abg"); 
// true

// Hallará 'a', luego cualquier letra entre '[bcdef]'
// y finalmente hallará una 'g'
?>  

Abajo: metacaracter {}. También son usados para indicar la cantidad de caracteres en los que se deben buscar las coincidencias.

En .PHP

<?php 
// Cadena de prueba
$texto = "El código de verificación es 1234.";

// Busca exactamente 4 dígitos seguidos
if (preg_match("/\d{4}/", $texto, $coincidencias)) {
echo "Se encontró un número de 4 dígitos: " . $coincidencias[0];
} else {
echo "No se encontró un número de exactamente 4 dígitos.";
}

// + + + + 

// INDICANDO CANTIDADES Y RANGOS
  // En el primer grupo, hallar un dígito entre 0 a 9
  // En el segundo grupo, hallar dos dígitos entre 0 a 9
  // En el tercer grupo, hallar tres dígitos entre 0 a 9
  echo preg_match("/[0-9]{1}-[0-9]{2}-[0-9]{3}/", "3-55-121"); 
  // true (sí existen coincidencias en esos rangos)

// + + + + 

echo preg_match("/[0-9]{1}-[0-9]{2}-[0-9]{3}/", "23-355-2121"); 
// false (no existen coincidencias en la cantidad de rangos)
// Porqué? Observar y explicar
// Pista: no coinciden la cantiadad de caracteres a coincidir
?>  

Abajo: metacaracter +

En .PHP

<?php 

// Cadena de referencia
$cadena = "Holaaa mundo";

// Buscar una o más repeticiones de la letra "a"
if (preg_match("/a+/", $cadena)) {
echo "Hay al menos una repetición de 'a'";
} else {
echo "No se encontró coincidencia.";
}

// Salida esperada: 
// Se encontró una coincidencia con 'a' 
// repetida una o más veces.

?>  

Abajo, metacaracter de opcionalidad. Si es ()? el caracter entre paréntesis indicará que ese caracter (o conjunto de caracteres) será opcional; es decir, habrá coincidencia si están o no. Ejemplo de uso: /color(es)?/ –donde se pide hallar una coincidencia con la palabra 'color', aunque termine o no en 'es'–. En otro ejemplo especial, la expresión /col?r/ podrá coincidir con una referencia, ya sea si en esa referencia existe o no la letra que precede al signo. Se explica eso en el siguiente código:


En .PHP

<?php 

    // 1ER EJEMPLO: COINCIDENCIA OPCIONAL
    $cadena = "colores";
    // (es) es opcional
    if (preg_match("/color(es)?/", $cadena)) {
    echo "Coincide con 'color' o 'colores'.";
    }
    // Coincide con 'color' o 'colores'.

    // --- ---- --- --- ---- ---

    // 2DO EJEMPLO: COINCIDENCIA OPCIONAL
    // String de referencia
    $cadena = "color";

    // Función regex pide que el caracter anterior a ? sea opcional
    if (preg_match("/colo?r/", $cadena)) {
    echo "Coincide con 'color' o 'colr'.";
    }

    // Tanto con 'color' o con 'colr, la coincidencia será activada
    // R: Coincide con 'color' o 'colr'.

    ?>
    

Abajo. Usado entre corchetes rectos, el signo - define un rango de coincidencia entre valores (numéricos y/o alfanuméricos).

En .PHP

      <?php 

    // [a-z] Coincide con minúsculas, de  "a" a "z".
    // [A-Z] Coincide con mayúsculas, de "A" a  "Z".
    // [0-9] Coincide con dígito, de "0" a "9".
    // [0-9a-f] Coincide con cualquier dígito hexadecimal, ya sea de 0 a 9 o de "a" a "f".

    // OTROS EJEMPLOS
    $cadena = "abc123";
    // regex para coincidencia con MINÚSCULAS
    if (preg_match("/[a-z]/", $cadena)) {
    echo "Coincide con al menos una letra minúscula de 'a' a 'z'.";
    }
    // Coincide con al menos una letra minúscula de 'a' a 'z'.

    echo "<hr>";

    if (preg_match("/[0-9]/", $cadena)) {
    echo "Coincide con al menos un número.";
    }
    // Coincide con al menos un número.

    echo "<hr>";

    if (preg_match("/[a-z0-9]/", $cadena)) {
    echo "Coincide con al menos una letra o un número.";
    }
    // Coincide con al menos una letra o un número.
    ?>
    

Combinación de sintaxis RegEx complejas

Finalmente, dos ejemplos de combinación de sintaxis RegEx para indicar coincidencias más complejas, o negarlas:

En .PHP

<?php

// Ubicar coincidencia AL INICIO DEL STRING (signo ^)
  // en un rango entre a-z y A-Z
  // ó con un número de 0 a 9
echo preg_match("/^([a-zA-Z]|[0-9])/", "Eres perla que surgiste");
// True

// USANDO PARA NEGAR
  // Ojo como el signo ^ se usa para negar aquí
  // Y si deseamos negar lo anterior?
  // Es decir, ¿Inicia el string con letras 
  // que no sean a-z, A-Z o con cualquier número?
echo preg_match("/^[^a-zA-Z0-9]/", "#Holi amigos");
// True -sí inicia con cualquier otra cosa 
// que no sean letras o números

?>

Coincidencias insensibles a mayúsculas o minúsculas mediante el caracter /i

En .PHP

<?php
/* Hallar la coincidencia desde la porción 'gua' 
en la frase 'Hola GuAyaquileños', sean o no mayúsculas */
echo preg_match("/gua/i", "Hola GuAyaquileños"); // true
?>

Las RegEx es una potente sintaxis para hallar caracteres o conjuntos de ellos desde PHP; es decir, desde instrucciones dadas hacia el servidor en remoto, y no en local, como sí se lo podría hacer desde el lenguaje Javascript.

En la siguiente sección revisaremos otras sintaxis útiles.