Pregunta

Tengo un poco de texto, algo como esto:

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text

Lo que quiero es mantener el texto Desconocido , pero deshacerse de la ( TEXTO algunos conocidos) y (Existe otro texto conocido) .

Creo que el preg_replace me dará lo que quiero, pero necesito la expresión regular para reemplazar a esto:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)

con este ..

Unknown Text

Veo el preg_replace toma 3 parámetros, la regex , la texto de sustitución y tema .

¿Hay una manera de pasar el valor de texto desconocido para el parámetro de texto de sustitución, OR, una manera de reaplce las piezas izquierda y derecha (texto algunos conocidos) y (Existe otro SABER TEXTO) sin quitar el texto Desconocido? Alternativamente, hay un str_replace () solución a esto?

Gracias

--- ACTUALIZACIÓN ---

El (Existe otro texto conocido) pieza puede existir en otros lugares del texto, pero no quiero que se elimine a menos que sigue el patrón de (TEXTO algunos conocidos) Texto Desconocido (Existe otro texto conocido) . Pienso en las sugerencias iniciales str_replace no funcionaría debido a esto.

¿Fue útil?

Solución

¿Cuáles son las condiciones? Si usted tiene:

  

(Existe otro texto conocido) Desconocido texto (TEXT algunos conocidos)

(es decir. Si el texto entre paréntesis se intercambia), ¿todavía quieres eliminarlo? Es necesario que el texto conocido siempre estar al principio o al final de la línea? Si la respuesta es sí a cualquiera de estas, usted está probablemente mejor usar una expresión regular. Algo como esto:

$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);

Las barras invertidas (\) son para escapar de los personajes ( y ), que tienen un significado especial en las expresiones regulares. Asumo que usted quiere cambiar el contenido - se pueden quitar en ese punto

.

En esta expresión regular, el . es un especial operador que significa "cualquier carácter". Que coincidirá con cualquier carácter. El + significa "uno o más", y es una modificador en el operador anterior - juntos, estos pueden ser interpretados como "uno o más de cualquier carácter" coincidente. Los personajes ( y ) se utilizan para la captura de las secciones del texto en un sub-patrón . Al abarcar la .+ paréntesis, capturamos esto a utilizar en la sustitución. La primera sección rodeada por ( y ) están etiquetados $1 por el motor de expresiones regulares. Si tuviéramos $2 más, estarían etiquetados, $3, y así sucesivamente.

Si ninguna de estas situaciones, puede utilizar la función str_replace como se menciona en las otras respuestas.

Otros consejos

Simplemente podría proporcionar str_replace con una matriz de las cadenas que desea eliminar, tales como:

$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);

Si usted no requiere ninguna coincidencia de patrones inteligente, esto será una solución más rápida que la expresión regular.

Si los dos textos verdaderamente se conocen, se puede hacer esto:

$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');

que es un mejor rendimiento que una expresión regular. El primer argumento es el juego de llaves para reemplazar, el segundo argumento es lo que lo sustituya por, y el tercero es el tema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top