2017-05-11 1 views
-1

J'ai du mal à comprendre comment fonctionnent les fonctions php stripos et str_replace.Comment fonctionne stripos et str_replace?

J'ai un corps de texte tel que: {% if group.newt !== "" %} XYZ's {% else %} ABC's {% endif %}

et suis désireux de remplacer ce texte par Go to this link www.google.com.

Je recherche à travers les corps de texte:

if(stripos($entity->getBodyOfText(), $strTFind) !== false) {preg_match("{% if group.newt !== "" %} XYZ's {% else %} ABC's {% endif %}", $strToReplace)};

OU

$str_replace($strToFind, $strToReplace, $entity->getBodyOfText());

Les résultats que je recevais sont que le texte n'est pas trouvé ou remplacé! Je ne comprends pas pourquoi. Quelqu'un pourrait-il éclairer cela pour moi?

EDIT:

Le corps du texte est un modèle de courrier électronique avec beaucoup d'images, du texte et le code de brindille. Dans un ensemble particulier de modèles d'e-mail, je dois trouver et remplacer un bloc entier de code de brindilles avec une ligne de texte (peu importe ce que ce texte est). Le problème que j'ai est quand je cherche le bloc de code dans les modèles d'email using str_replace ou preg_replace, ces fonctions ne trouvent pas ou ne remplacent pas le bloc que j'essaye de trouver et remplacer.

Donc, ma sortie est la même (rien n'est trouvé, rien n'est changé).

Par exemple:

`here would be an image 

    now starts a heading, 

     some more text with {{ twig.variable }} and then more text. 
    more 

    text, lots more text some {% twig.fucntions %}blah{% ending %} and 
then here is the block 
I want to find and replace: {% replace this whole thing including the brackets and percentage signs %}keep replacing 
{% else %} 
replace that else (everything including the brackets and percentage signs)and 
{% this too %}. 

    some more ending text. 

    image, 

    the end` 

J'espère que cela!

+0

Qu'est-ce qu'un petit exemple de la chaîne complète qui contient la sous-chaîne '{% ...%}'? – mickmackusa

+0

c'est le code de twig ... "{% if statements! ==" "%} cela devrait montrer {% else%} une autre chose montre {% endif%}". – grgre

+0

Je ne suis pas familier avec le code de twig. Lorsque j'essaie d'aider d'autres utilisateurs avec des questions de type str/preg replace, j'aime voir une explication claire de ce qu'est l'entrée complète, ce qu'elle cible en tant que sous-chaîne, et ce qui se passe à sa place. Je vois que vous voulez que la chaîne de liens entre, mais le reste n'est pas clair. S'il vous plaît montrer les textes complets avant et après, de sorte que votre question soit claire. Y at-il plus de texte en dehors de l'expression twig? – mickmackusa

Répondre

0

utilisation str_replace ...

str_replace("Pattern to search",$stringToSearch,"Replacement text"); 

Ainsi, dans la pratique:

$string = "{% if group.newt !== '' %} XYZ's {% else %} ABC's {% endif %}"; 

$newString = str_replace("{% if group.newt !== '' %} XYZ's {% else %} ABC's {% endif %}",$string,"Go to this link www.google.com"); 

echo $newString; 

Fyi, vous aurez besoin de ce lien href pour qu'il soit un lien réel bien. Aussi fixé votre "" dans votre comparaison à être "pour accueillir PHP encapsulant avec" ";

testé dans PhpFiddle.com

Si vous prévoyez d'utiliser votre fonction

$entity->getBodyOfText(); 

remplacer $ string avec qui, ou affecter

$string = $entity->getBodyOfText(); 
0

En utilisant une solution non-regex exige que vous connaissez exactement la sous-chaîne que vous essayez de remplacer - je suppose que vous connaissez la sous-chaîne. Un mot d'avertissement, s'il y a une chance que la sous-chaîne se produise plus d'une fois et vous ne voulez qu'un remplacement, alors str_replace() échouera en remplaçant toutes les sous-chaînes trouvées. Si la sous-chaîne est unique dans la chaîne, ou si vous souhaitez remplacer toutes les sous-chaînes dupliquées, tout fonctionnera comme prévu.

Code (Demo):

$find='{% replace this whole thing including the brackets and percentage signs %}keep replacing 
{% else %} 
replace that else (everything including the brackets and percentage signs)and 
{% this too %}.'; 
$replace='LINK'; 

$text=str_replace($find,$replace,$text); 
echo "$text"; 

Sortie:

here would be an image 

    now starts a heading, 

     some more text with {{ twig.variable }} and then more text. 
    more 

    text, lots more text some {% twig.fucntions %}blah{% ending %} and 
then here is the block 
I want to find and replace: LINK 

    some more ending text. 

    image, 

    the end 

Si vous avez besoin d'une solution mieux adaptée, s'il vous plaît expliquer comment cette méthode vous échouez et je vais le régler.

+0

@grgre S'il vous plaît me donner quelques commentaires sur mes deux tentatives. Si je me trompe encore, veuillez réessayer de m'expliquer votre question. Si mes schémas n'accueillent pas adéquatement toutes vos syntaxes de code de brindilles possibles, veuillez fournir un échantillon de contribution supplémentaire pour que je puisse les tester. Si l'une de ces méthodes est ce que vous cherchez, faites-moi savoir laquelle vous voulez utiliser afin que je puisse supprimer l'autre. – mickmackusa

+0

S'il vous plaît vérifier mon édition, j'espère que cela vous aidera à mieux comprendre. Vos réponses ne fonctionneront pas pour moi. – grgre

+0

@grge J'ai mis à jour ma réponse. Si cela n'aide pas, encore une fois, s'il vous plaît laissez-moi un commentaire. – mickmackusa