2010-11-24 5 views
0

J'ai créé ceexpressions régulières php attraper entre guillemets

echo "<p>".preg_replace("/\'[^\)]+\'/","",$line)."</p>"; 

pour obtenir les mots entre les guillemets simples « Paramètres de confidentialité » de cette ligne

$_lang['privacy.settings'] = 'Privacy settings'; 

mais je reçois cette sortie

$_lang[ 

Je ne peux pas comprendre. Regex est si compliqué.

+2

Quelle est votre question? – Alex

+0

Y a-t-il une question ici? –

+1

1) Quel est le problème? 2) Pourquoi utilisez-vous 'preg_replace' au lieu de' preg_match'? 3) Pourquoi essayez-vous d'attribuer une valeur à '$ result'? – You

Répondre

0

Si vous essayez d'obtenir la valeur de cette ligne, essayez:

echo "<p>" . preg_replace("/^.*=.*\'(.+)\'.*$/", "$1", $line) . "</p>"; 
+0

donne comme sortie – Ritz

+0

$ _lang ['privacy.settings'] = 'Paramètres de confidentialité' – Ritz

+0

Vraiment? J'ai testé cela et ça marche pour moi. Où 'line line = '$ _lang [\' privacy.settings \ '] = \' Paramètres de confidentialité \ '';' – Orbling

1

Le + est gourmand dans votre regex, il correspondra à la chaîne aussi longtemps que possible. Vous pouvez résoudre ce problème avec:

preg_replace("/\'[^\)\']+\'/","",$line) 

ou

preg_replace("/\'[^\)]+?\'/","",$line) 

Le? dans le second exemple dit à la regex que + ne devrait pas être gourmand.