preg_replace o str_replace
-
21-09-2019 - |
Domanda
ho un po 'di testo, qualcosa di simile:
Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text
Quello che voglio è quello di mantenere la Testo Unknown , ma sbarazzarsi del ( testo CONOSCIUTO) e (altro testo CONOSCIUTO) .
Credo che la preg_replace mi darà quello che voglio, ma ho bisogno l'espressione regolare per sostituire questo:
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
con questo ..
Unknown Text
Vedo il preg_replace prende 3 parametri, la regex , la testo di sostituzione e Oggetto .
C'è un modo per passare il valore del testo sconosciuto al parametro testo sostitutivo, OR, un modo per reaplce i pezzi a sinistra ea destra (un testo noto) e (Alcuni ALTRE CONOSCERE TEXT) senza rimuovere il testo sconosciuto? In alternativa, c'è un str_replace () soluzione a questo?
Grazie
--- --- UPDATE
L'(altro testo CONOSCIUTO) pezzo può esistere in altri luoghi del testo, ma non voglio che venga rimossa a meno che non segue il modello di (SOME TEXT CONOSCIUTO) Testo Unknown (altro testo CONOSCIUTO) . Sto pensando i suggerimenti str_replace iniziali non avrebbero funzionato a causa di questo.
Soluzione
Quali sono le condizioni? Se si dispone di:
(altro testo CONOSCIUTO) testo Unknown (SOME TEXT CONOSCIUTO)
(cioè. Se il testo bracketing viene scambiato), vuoi ancora per rimuoverlo? Deve il testo noto essere sempre all'inizio o alla fine della linea? Se la risposta è sì a una di queste, si è probabilmente meglio usare un'espressione regolare. Qualcosa di simile a questo:
$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);
I backslash (\
) sono per sfuggire i personaggi (
e )
, che hanno un significato speciale nelle espressioni regolari. Suppongo che si vorrà modificare il contenuto - è possibile rimuoverli a quel punto
In questo regex, il .
è una speciale operatore che significa "qualsiasi carattere". Sarà ogni carattere. +
significa "uno o più", ed è un modificatore sull'operatore precedente - insieme, questi può essere interpretato come matching "uno o più caratteri". I caratteri (
e )
vengono utilizzati per catturare le sezioni del testo in un subpattern . Con che comprende il .+
tra parentesi, catturiamo questo per essere utilizzato in sostituzione. La prima sezione circondata da (
e )
sono etichettati $1
dal motore regex. Se avessimo più, sarebbero etichettati $2
, $3
, e così via.
Se nessuno di questi si applicano, è possibile utilizzare la funzione di str_replace
come detto nelle altre risposte.
Altri suggerimenti
Si potrebbe semplicemente fornire str_replace con una serie di stringhe che si desidera rimuovere in quanto tale:
$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);
Se non si richiede alcun pattern matching intelligente, questa sarà una soluzione più veloce di espressioni regolari.
Se i due testi veramente sono noti, si può fare questo:
$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');
, che è la prestazione migliore di un'espressione regolare. Il primo argomento è l'insieme di chiavi per sostituire, il secondo è quello di sostituirlo con, ed il terzo è oggetto.