Question

J'ai un texte, quelque chose comme ceci:

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

Ce que je veux est de garder le Inconnu Texte , mais se débarrasser de la ( CERTAINS TEXTE CONNU) et (un autre texte CONNU) .

Je pense que le preg_replace me donner ce que je veux, mais je dois l'expression régulière pour remplacer:

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

avec ce ..

Unknown Text

Je vois le preg_replace prend 3 paramètres, regex , le sujet texte de remplacement et .

Y at-il un moyen de transmettre la valeur du texte inconnu au paramètre texte de remplacement, OU, un moyen de reaplce gauche et les bons morceaux (CERTAINS TEXTE CONNU) et (QUELQUES AUTRES tEXTE EN SAVOIR) sans enlever le texte inconnu? Sinon, est-il un str_replace () solution à cela?

Merci

--- Mise à jour ---

(un autre texte CONNU) morceau peut exister dans d'autres endroits dans le texte, mais je ne veux pas enlever à moins qu'il suit le modèle de (CERTAINS TEXTE CONNU) Inconnu Texte (UNE AUTRE TEXTE CONNU) . Je pense les suggestions de str_replace initiales ne fonctionneraient pas à cause de cela.

Était-ce utile?

La solution

Quelles sont les conditions? Si vous avez:

  

(UNE AUTRE TEXTE CONNU) Unknown text (CERTAINS TEXTE CONNU)

(i.e.. Si le texte bracketing est permuté), vous voulez toujours l'enlever? Le texte doit être toujours connu au début ou à la fin de la ligne? Si la réponse est oui à l'une de ces, vous êtes probablement mieux d'utiliser une expression régulière. Quelque chose comme ceci:

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

Les barres obliques inverses (\) doivent échapper aux caractères ( et ), qui ont une signification particulière dans les expressions régulières. Je suppose que vous voulez modifier le contenu - vous pouvez les supprimer à ce point

.

Dans ce regex, . est un spécial opérateur qui signifie « tout caractère. » Il correspond à tout caractère. Le + signifie « un ou plusieurs », et est un modificateur de l'opérateur précédent - ensemble, ceux-ci peut être interprété comme correspondant à « une ou plusieurs de caractère ». Les caractères ( et ) sont utilisés pour capturer des sections du texte dans un subpattern . En englobant le .+ entre parenthèses, on capture ce à utiliser dans le remplacement. La première section entourée par ( et ) sont étiquetés $1 par le moteur regex. Si nous avions plus, ils seraient étiquetés $2, $3, et ainsi de suite.

Si aucun de ces cas, vous pouvez utiliser la fonction str_replace comme mentionné dans les autres réponses.

Autres conseils

Vous pouvez simplement fournir str_replace avec un tableau des chaînes que vous souhaitez supprimer en tant que tel:

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

Si vous n'avez pas besoin de correspondance de motif intelligent, ce sera une solution plus rapide que regex.

Si les deux textes sont connus vraiment, vous pouvez faire ceci:

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

qui est une meilleure performance qu'une expression régulière. Le premier argument est l'ensemble des clés pour remplacer, le second argument est que de le remplacer par, et le troisième est le sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top