سؤال

هذا ما لدي حتى الآن:

<?php
$text = preg_replace('/((\*) (.*?)\n)+/', 'awesome_code_goes_here', $text);
?>

أنا بنجاح مطابقة قوائم النص العادي بتنسيق:

* list item 1
* list item 2

أود استبداله ب:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
</ul>

لا أستطيع الحصول على رأسي حول التفاف <ul> والاحتلال من خلال <li>س! يمكن لأي شخص الرجاء المساعدة؟

تحرير: الحل كما أجاب أدناه ...

يقرأ الرمز الخاص بي الآن:

$text = preg_replace('/\* (.*?)\n/', '<ul><li>$1</li></ul>', $text);
$text = preg_replace('/<\/ul><ul>/', '', $text);

هذا فعلها!

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

المحلول

سيكون هناك خيار واحد هو ببساطة استبدال كل عنصر قائمة مع <ul><li>list item X</li></ul> ثم قم بتشغيل الاستبدال الثاني الذي سيحل محل أي </ul><ul> بدون شيء.

نصائح أخرى

أعلم أن هذا قديم قديم - لكنه يحتاج إلى حل. جرب هذا! :)

$text = preg_replace("/\[ul\](.*)\[\/ul\]/Usi", "<ul>\\1</ul>", $text);
$text = preg_replace("/\[li\](.*)\[\/li\]/Usi", "<li>\\1</li>", $text);

أنا لست خبيرا مع Regex's، ولكن ما سترغب في القيام به هو تطابق النمط الذي لديك والتقاطه في الحال في الحديث عن طريق المحيط بالنمط المطلوب مع (). يمكنك بعد ذلك وضع 1 دولار (للحصول على المرجع الخلفي الأول وما إلى ذلك) في "قسم الكود الرائع"

ريجيكس الأصدقاء لديه تعليمي حقا رائع حقا حول التعبيرات العادية إذا كنت بحاجة إلى المزيد

يمكنك استخدام preg_match_all. لتتناسب مع جميع العناصر ثم أعد كتابةها داخل علامات ul و li.

وأعتقد أن هذا هو ما تريد

<?php

$text = <<<TEXT
* item
* item
TEXT;

$html = preg_replace( "/^\\* (.*)$/m", "<li>\\1</li>", $text );

echo '<ul>', $html, '</ul>';
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top