php - texto - string strip_tags
¿Cómo puedo convertir expresiones ereg a preg en PHP? (4)
El mayor cambio en la sintaxis es la adición de delimiters .
ereg(''^hello'', $str);
preg_match(''/^hello/'', $str);
Los delimitadores pueden ser prácticamente cualquier cosa que no sea alfanumérica, una barra invertida o un carácter de espacio en blanco. Los más usados son generalmente ~
, /
y #
.
También puede usar paréntesis coincidentes:
preg_match(''[^hello]'', $str);
preg_match(''(^hello)'', $str);
preg_match(''{^hello}'', $str);
// etc
Si su delimitador se encuentra en la expresión regular, debe escapar de él:
ereg(''^/hello'', $str);
preg_match(''/^//hello/'', $str);
Puede escaparse fácilmente de todos los delimitadores y caracteres reservados en una cadena utilizando preg_quote :
$expr = preg_quote(''/hello'', ''/'');
preg_match(''/^''.$expr.''/'', $str);
Además, PCRE admite modifiers para varias cosas. Uno de los más utilizados es el modificador insensible a mayúsculas i
, la alternativa a eregi :
eregi(''^hello'', ''HELLO'');
preg_match(''/^hello/i'', ''HELLO'');
Puede encontrar la referencia completa a la sintaxis PCRE en PHP en el manual , así como una lista de diferencias entre POSIX regex y PCRE para ayudar a convertir la expresión.
Sin embargo, en tu ejemplo simple no usarías una expresión regular:
stripos($str, ''hello world'') === 0
Como las expresiones regulares de POSIX (ereg) están en desuso desde PHP 5.3.0, me gustaría saber una manera fácil de convertir las expresiones antiguas a PCRE (Perl Compatible Regular Expressions) (preg) .
Por ejemplo, tengo esta expresión regular:
eregi(''^hello world'');
¿Cómo puedo traducir expresiones en expresiones compatibles con preg_match
?
Nota: Esta publicación sirve como marcador de posición para todas las publicaciones relacionadas con la conversión de ereg a preg y como opciones duplicadas para preguntas relacionadas. Por favor no cierres esta pregunta.
Relacionado:
- Cómo cambiar el eregi de PHP a preg_match
- Cambiar ereg_replace a preg_replace equivalente
El reemplazo de Ereg con preg (a partir de PHP 5.3.0) fue un movimiento correcto a nuestro favor.
preg_match, que usa una sintaxis de expresión regular compatible con Perl, a menudo es una alternativa más rápida a ereg.
Debes saber 4 cosas principales para portar patrones de ereg para preg:
Agregar delimitadores (/):
''pattern'' => ''/pattern/''
El delimitador de escape si forma parte del patrón:
''patt/ern'' => ''/patt//ern/''
Lograrlo programáticamente de la siguiente manera:
$old_pattern = ''<div>.+</div>'';
$new_pattern = ''/'' . addcslashes($old_pattern, ''/'') . ''/'';
eregi (coincidencia insensible a mayúsculas y minúsculas):
''pattern'' => ''/pattern/i''
Por lo tanto, si está utilizando la función eregi para la coincidencia insensible de mayúsculas y minúsculas, simplemente agregue ''i'' al final del nuevo patrón (''/ pattern /'') .Valores ASCII : en ereg, si usa un número en el patrón, se supone que se está refiriendo al ASCII de un personaje. Pero en preg, el número no se trata como valor ASCII. Por lo tanto, si su patrón contiene valor ASCII en la expresión ereg (por ejemplo: nueva línea, pestañas, etc.), conviértalo a hexadecimal y póngalo como prefijo / x.
Example: 9(tab) becomes /x9 or alternatively use /t.
Hay más diferencias entre ereg()
y preg_replace()
que solo la sintaxis:
Valor de retorno:
- Por error : ambos devuelven
FALSE
- En ninguna coincidencia :
ereg()
devuelveFALSE
,preg_match()
devuelve0
- En coincidencia :
ereg()
devuelve longitud de cadena o1
,preg_match()
devuelve siempre1
- Por error : ambos devuelven
Conjunto resultante de subcadenas coincidentes: si no se encuentra ninguna subcadena (
(b)
en...a(b)?
), El elemento correspondiente en el resultado deereg()
seráFALSE
, mientras que enpreg_match()
no se establecerá en absoluto.
Si uno no es lo suficientemente valiente como para convertir su ereg()
a preg_match()
, él o ella puede usar mb_ereg() , que todavía está disponible en PHP 7.
Desde PHP versión 5.3 ereg obsoleto.
Para pasar a ereg a preg_match solo un pequeño cambio en nuestro patrón
Primero tienes que agregar el delímetro a tu código
por ejemplo, ereg(''A-Z0-9a-z'',''string'');
a
preg_match(''/A-Z0-9a-z/'',''string'');
Para eregi
- eregi
sensible a las eregi
ponga ''i'' después del último delimitador
p.ej
eregi(''pattern'',''string'');
a
preg_match (''/pattern/i'',''string'');