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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top