2012-07-04 8 views
0

Suite à cette post je tente la même tâche, mais l'expression rationnelle donnée ci-dessous me donne des résultats contradictoires:correspondants des caractères spécifiques précédés d'un espace ou rien Regex

$text = "Jiaaah.. RT @mizter_popo"; 

$pattern = "/(^|[ ])(\RT(?=\s))/"; 

if(preg_match($pattern, $text)) { 
    echo "correct"; 
} else { 
    echo "wrong"; 
} 

Je suis censé ceci pour donner « correct » . Exécuter cela dans un script PHP sur mon serveur local et here renvoie «faux». Exécuter la même logique here renvoie «correct»? Quelqu'un peut-il aider à expliquer ce qui se passe? Ou peut-être ai-je tort de m'attendre à ce que 'correct' soit répercuté?

Répondre

1

Pour moi, enlever la \ avant que les RT fonctionne aussi bien dans ce cas précis:

$pattern = "/(^|[ ])(RT(?=\s))/"; 

Il est possible que le site de testeur de regex font une lourde aseptisation pour faire que les gens ne cassent pas leur site , ce qui peut biaiser ce qui fonctionne et ce qui ne fonctionne pas.

+0

Parfait! J'aurais dû réaliser qu'un testeur en ligne ferait ça. Je vous remercie! – djderek

0

J'ai trouvé un motif qui utilise une assertion à la place du look-behind. Il y a alternance aussi bien, mais je parie que cela pourrait être pris en compte dans l'affirmation avec quelqu'un un peu plus REGEX talentueux que moi ...

$pattern = "/(^RT)|((?<=[ ])RT)/"; 
+0

ah Je n'y avais pas pensé de ce point de vue. Merci – djderek

0

Ce code travaillerait

if (preg_match('/(?<=^|\s)RT(?=\s)/', $subject)) { 
    # Successful match 
} else { 
    # Match attempt failed 
} 

mais le site que vous avez mentionné ne pas le soutenir de toute façon.

+0

Aussi bien - j'ai vraiment besoin d'améliorer mon regex! – djderek

Questions connexes