سؤال

لدي سلسلة:

هذا نص، "رصيدك المتبقي 0.10 دولار"، النهاية 0

كيف يمكنني استخراج السلسلة الموجودة بين علامتي الاقتباس المزدوجتين والحصول على النص فقط (بدون علامتي الاقتباس المزدوجتين):

بقي رصيدك 0.10 دولار

لقد حاولت preg_match_all() ولكن دون حظ.

هل كانت مفيدة؟

المحلول

وطالما ظل التنسيق كما هو، يمكنك القيام بذلك باستخدام تعبير عادي. "([^"]+)" سوف تتطابق مع النمط

  • اقتباس مزدوج
  • علامة اقتباس واحدة على الأقل غير مزدوجة
  • اقتباس مزدوج

الأقواس حول [^"]+ يعني أنه سيتم إرجاع هذا الجزء كمجموعة منفصلة.

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

نصائح أخرى

لجميع تلاحق محلل سلسلة عرض كامل، حاول هذا:

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

استخدم في preg_match:

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

وإرجاع:

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

وهذا يعمل مع شظايا سلسلة مفردة ومزدوجة نقلت.

وجرب هذا:

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

ويجب عليك الحصول على كافة السلاسل المستخرج في نتائج $ [1].

وعلى عكس إجابات أخرى، وهذا يدعم الهروب، على سبيل المثال "string with \" quote in it".

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

والتعبير '"([^\\"]+)"' العادية سوف تتطابق مع أي شيء بين علامات اقتباس مزدوجة.

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

ومجرد استخدام str_replace والهروب من الاقتباس:

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

وتحرير:

عذرا، لم نرى ان كان هناك نص بعد الاقتباس 2ND. في هذه الحالة، كنت ببساطة إلى 2 عمليات البحث، واحدة للحصول على الاقتباس الأول واحد للحصول على الاقتباس 2nd، و ثم القيام SUBSTR إلى خارج كل الأشياء بين البلدين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top