regulares probar preg_match pattern matches expresiones especiales caracteres php regex preg-match

php - probar - Delimitador no debe ser alfanumérico o barra invertida y preg_match



probar expresiones regulares (5)

Debe especificar un delimitador para su expresión. Un delimitador es un carácter especial usado al principio y al final de su expresión para indicar qué parte es la expresión. Esto le permite usar modificadores y el intérprete para saber cuál es una expresión y cuáles son modificadores. Como indica el mensaje de error, el delimitador no puede ser una barra diagonal inversa porque la barra diagonal inversa es el carácter de escape.

$pattern = "/My name is ''(.*)'' and im fine/";

y debajo del mismo ejemplo, pero con el modificador i para que coincida sin ser sensible a mayúsculas y minúsculas.

$pattern = "/My name is ''(.*)'' and im fine/i";

Como puede ver, el i está fuera de las barras diagonales y, por lo tanto, se interpreta como un modificador.

También tenga en cuenta que si utiliza un carácter de barra inclinada (/) como delimitador, debe evitar los usos posteriores de / en la expresión regular, si está presente.

Tengo este código:

$string1 = "My name is ''Kate'' and im fine"; $pattern = "My name is ''(.*)'' and im fine"; preg_match($pattern , $string1, $matches); echo $matches[1];

y cuando estoy ejecutando, devuelve este error:

Advertencia: preg_match () [function.preg-match]: Delimitador no debe ser alfanumérico o de barra invertida


El patrón debe tener delimitadores. Los delimitadores pueden ser una barra diagonal (/) o cualquier carácter no alfanumérico (#, $, *, ...). Ejemplos

$pattern = "/My name is ''(.*)'' and im fine/"; $pattern = "#My name is ''(.*)'' and im fine#"; $pattern = "@My name is ''(.*)'' and im fine@";


La solución (que otras respuestas no mencionan, al menos en el momento en que originalmente escribí esto) es que cuando PHP se refiere a los delimitadores, no se refiere a los delimitadores que se ven en el código (que son comillas), pero el siguiente personajes dentro de la cadena. (De hecho, nunca he visto esto en ningún lugar de ninguna documentación: hay que verlo en ejemplos). Por lo tanto, en lugar de tener una sintaxis de expresiones regulares como la que puedes estar acostumbrado en muchos otros idiomas:

/something/

PHP usa cadenas, y luego mira dentro de la cadena para otro delimitador:

''/something/''

El delimitador al que se refiere PHP es el par de / caracteres, en lugar del par de '' caracteres. Entonces, si escribe ''something'' , PHP tomará s como el delimitador deseado y se quejará de que no tiene permitido usar caracteres alfanuméricos como su delimitador.

Entonces, si quiere pasar (por ejemplo) una i para mostrar que desea una coincidencia de mayúsculas y minúsculas, la pasa dentro de la cadena, pero fuera de los delimitadores de expresiones regulares:

''/something/i''

Si desea usar algo que no sea / como su delimitador, puede, por ejemplo, si está haciendo coincidir una URL y no quiere tener que escapar de todas las barras diagonales:

''~something~''


Necesitas un delimitador para tu patrón. Se debe agregar al inicio y al final del patrón de la siguiente manera:

$pattern = "/My name is ''(.*)'' and im fine/"; // With / as a delimeter


Por favor prueba con esto

$pattern = "/My name is ''/(.*/)'' and im fine/";