PHP Regularexpression: تطابق أي شيء (بما في ذلك Whitespaces)
-
18-09-2019 - |
سؤال
text text text
text text text
{test}
content
content
content
{/test}
text text text
text text text
أحتاج إلى الحصول على نتائج منفصلة من السلسلة أعلاه:
1.
{test}
content
content
content
{/test}
2.
content
content
content
لذلك، ماذا يجب أن يكون منفصلين أنماط التعبير العادي بالنسبة بي أتش بي للحصول على النتائج المذكورة أعلاه
المحلول
ماذا عن شيء مثل هذا:
$str = <<<STR
text text text
text text text
{test}
content
content
content
{/test}
text text text
text text text
STR;
$m = array();
if (preg_match('#\{([a-zA-Z]+)\}(.*?)\{/\1\}#ism', $str, $m)) {
var_dump($m);
}
والتي سوف تحصل على هذا النوع من الإخراج:
array
0 => string '{test}
content
content
content
{/test}' (length=50)
1 => string 'test' (length=4)
2 => string '
content
content
content
' (length=37)
لذلك، في $m[0]
لديك سلسلة متطابقة كاملة (أي العلامات + المحتوى), ، و في $m[2]
عليك فقط المحتوى بين العلامات.
لاحظ أنني استخدمت العلامات "العامة"، وليس على وجه التحديد "test
"؛ يمكنك تغيير ذلك إذا كان لديك فقط"test
"العلامات.
لمزيد من المعلومات، يمكنك إلقاء نظرة على، على الأقل:
نصائح أخرى
لالتقاط العلامات والمحتويات معا:
/(\{test\}[^\x00]*?\{\/test\})/
للقبض على المحتويات فقط:
/\{test\}([^\x00]*?)\{\/test\}/
لا تنتمي إلى StackOverflow