Question

J'ai une chaîne:

  

Ceci est un texte "Votre solde est restitué à 0,10 USD", Fin 0

Comment puis-je extraire la chaîne entre les guillemets et n’avoir que le texte (sans les guillemets):

  

Votre solde est resté 0,10 $

J'ai essayé preg_match_all () mais sans succès.

Était-ce utile?

La solution

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

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

Les crochets entourant [^ "] + signifient que cette partie sera renvoyée sous forme de groupe séparé.

<?php

$str  = 'This is a text, "Your Balance left <*>.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 <*>.10

Autres conseils

Pour tous ceux qui recherchent un analyseur de chaînes complet, essayez ceci:

(?:(?:"(?:\\"|[^"])+")|(?:'(?:\\'|[^'])+'));

Utilisation dans preg_match:

$haystack = "something else before 'Lars\' Teststring in quotes' something else after";
preg_match("/(?:(?:\"(?:\\\\\"|[^\"])+\")|(?:'(?:\\\'|[^'])+'))/is",$haystack,$match);

Retourne:

Array
(
    [0] => 'Lars\' Teststring in quotes'
)

Ceci fonctionne avec des fragments de chaîne simples et doubles entre guillemets.

Essayez ceci:

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

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

Contrairement aux autres réponses, cela prend en charge les échappements, par exemple. " chaîne avec \ " citez-y " .

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

L'expression régulière '" ([^ \\ ") +) "' ' correspondra à tout ce qui se trouve entre deux guillemets.

$string = '"Your Balance left <*>.10", End 0';
preg_match('"([^\\"]+)"', $string, $result);
echo $result[0];

Utilisez simplement str_replace et échappez à la citation:

str_replace("\"","",$yourString);

Modifier:

Désolé, je n'ai pas vu qu'il y avait du texte après la deuxième citation. Dans ce cas, je voudrais simplement faire 2 recherches, une pour la première citation et une pour la deuxième citation, puis effectuer une sous-opération pour extraire tout le contenu entre les deux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top