¿Cómo ajusto mi código a continuación para reemplazar el segundo » carácter usando preg_replace?
$out = 'Home » Food » Fruit'; $out = preg_replace('/»/', 'Category:', $out, 1);¡Gracias por adelantado!
Para eliminar solo la segunda ocurrencia de una cadena, debe hacer coincidir la primera, y luego hacer coincidir y capturar todo el texto hasta la segunda, y luego reemplazar usando una referencia inversa.
Usar
$out = 'Home » Food » Fruit'; $out = preg_replace('/(»[^»]*)»/', '$1Category:', $out, 1); echo $out; Vea la demostración de PHP . El último argumento $limit hará que preg_replace solo reemplace la primera coincidencia.
Detalles :
(»[^»]*) - Capturando la coincidencia del grupo #1» - un literal »[^»]* - 0+ apariciones (debido al * cuantificador) de cualquier carácter que no sea »» - un literal »Vea la demostración de expresiones regulares .
Una variación que solo es compatible con Boost/PCRE (y las últimas versiones de Onigmo) y que también funcionará para usted:
/»[^»]*\K»/ Vea otra demostración de expresiones regulares . \K descartará todo el texto coincidente hasta el momento en la iteración actual. por lo tanto, solo tendrá el cheurón de cierre en el partido para ser reemplazado con su cadena de reemplazo.