php لاستخراج سلسلة من الاقتباس المزدوج
-
06-07-2019 - |
سؤال
لدي سلسلة:
هذا نص، "رصيدك المتبقي 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 إلى خارج كل الأشياء بين البلدين.