web-dev-qa-db-fra.com

php pour extraire une chaîne de citation double

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.

21
conandor

Tant que le format reste le même, vous pouvez le faire en utilisant une expression régulière. "([^"]+)" correspond au motif 

  • Double citation
  • Au moins une citation non double
  • Double citation

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
55
Tom Haigh

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.

15
user426486

Essaye ça :

preg_match_all('`"([^"]*)"`', $string, $results);

Vous devriez obtenir toutes vos chaînes extraites en $ résultats [1].

9
Arkh

Contrairement aux autres réponses, cela prend en charge les échappées, par exemple. "string with \" quote in it".

$content = stripslashes(preg_match('/"((?:[^"]|\\\\.)*)"/'));
5
Kornel

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];
0
Rich Adams