J'ai une ficelle:
Ceci est un texte "Votre solde restant $ 0.10", Fin 0
Comment puis-je extraire la chaîne entre les guillemets et n'avoir que le texte (sans les guillemets):
Votre solde a laissé 0,10 $
J'ai essayé preg_match_all()
mais sans succès.
Tant que le format reste le même, vous pouvez le faire en utilisant une expression régulière. "([^"]+)"
correspond au motif
Les crochets autour du [^"]+
signifient que cette partie sera renvoyée en tant que groupe séparé.
<?php
$str = 'This is a text, "Your Balance left $0.10", End 0';
//forward slashes are the start and end delimeters
//third parameter is the array we want to fill with matches
if (preg_match('/"([^"]+)"/', $str, $m)) {
print $m[1];
} else {
//preg_match returns the number of matches found,
//so if here didn't match pattern
}
//output: Your Balance left $0.10
Pour tous ceux qui recherchent un analyseur complet, essayez ceci:
(?:(?:"(?:\\"|[^"])+")|(?:'(?:\\'|[^'])+'));
Utiliser dans preg_match:
$haystack = "something else before 'Lars\' Teststring in quotes' something else after";
preg_match("/(?:(?:\"(?:\\\\\"|[^\"])+\")|(?:'(?:\\\'|[^'])+'))/is",$haystack,$match);
Résultats:
Array
(
[0] => 'Lars\' Teststring in quotes'
)
Cela fonctionne avec des fragments de chaîne simples et doubles.
Essaye ça :
preg_match_all('`"([^"]*)"`', $string, $results);
Vous devriez obtenir toutes vos chaînes extraites en $ résultats [1].
Contrairement aux autres réponses, cela prend en charge les échappées, par exemple. "string with \" quote in it"
.
$content = stripslashes(preg_match('/"((?:[^"]|\\\\.)*)"/'));
L'expression régulière '"([^\\"]+)"'
correspond à tout ce qui se trouve entre deux guillemets doubles.
$string = '"Your Balance left $0.10", End 0';
preg_match('"([^\\"]+)"', $string, $result);
echo $result[0];