سؤال

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\}/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top