çift ​​tırnak bir dize ayıklamak için php

6 Cevap php

Ben bir dize var:

Bu metin, "Sizin Dengesi 0,10 $ sol", sonu 0

Nasıl çift tırnak arasındaki dize ayıklamak ve (çift tırnak işaretleri olmadan) sadece metin olabilir:

Sizin Denge 0,10 $ bıraktı

I preg_match_all() ama hayır şans ile denedim.

6 Cevap

Sürece formatı aynı kalır gibi düzenli ifade kullanarak bunu yapabilirsiniz. "([^"]+)" desen maç olacak

  • Çift alıntı
  • En az bir yok-çift-tırnak
  • Çift alıntı

[^"]+ etrafında parantez bu bölümü ayrı bir grup olarak iade edilmesi anlamına gelir.

<?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

Herkes tam özellikli bir dizge ayrıştırıcı için avcılık için, bu deneyin:

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

Preg_match'in kullanın:

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

İade:

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

Bu tek ve çift tırnaklı dize fragmanları ile çalışır.

Bu deneyin:

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

Sen $ sonuçlarında tüm ayıklanan dizeleri almak gerekir [1].

Diğer yanıtlar aksine, bu kaçar destekler, örneğin "string with \" quote in it".

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

Düzenli ifade '"([^\\"]+)"', iki çift tırnak arasında herhangi maç olacak.

$string = '"Your Balance left $0.10", End 0';
preg_match('"([^\\"]+)"', $string, $result);
echo $result[0];

Sadece str_replace kullanımı ve alıntı kaçış:

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

Edit:

Üzgünüz, 2. teklif sonra bir metin olduğunu görmedim. Bu durumda, ben sadece o 2 aramalarda, ilk teklif için bir ve 2 teklif için bir, ve ikisi arasında extra tüm şeyler için bir substr yapardım.