سؤال

حسنا، هنا هو ما أحاول القيام به: أحاول استخدام PHP لتطوير ما هو أساسا <م> صغيرة فرعية من تنفيذ تخفيض السعر، لا يستحق باستخدام فئة تخفيض السعر الكامل

وأحتاج أساسا القيام str_replace، ولكن البديل ليحل محل سلسلة لكل تواجد الإبرة، وذلك للتعامل مع فتح وإغلاق HTML العلامات.

وعلى سبيل المثال، مائل هي زوج من العلامات النجمية مثل * هذه *، وحاصرت كتل التعليمات البرمجية التي backticks مثل `this`.

وأنا بحاجة إلى استبدال التواجد الأول من زوج من الأحرف مع علامة فتح HTML المقابلة، والثاني مع علامة إغلاق.

وأي أفكار بشأن كيفية القيام بذلك؟ فكنت أحسب أن تشارك نوعا من التعبير العادية ...

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

المحلول

وشخصيا، فما استقاموا لكم فاستقيموا حلقة من خلال كل تواجد * أو \ مع عداد، واستبدال الحرف مع علامة HTML المناسبة استنادا إلى عدد (على سبيل المثال، إذا كان العد حتى وأنت تضرب علامة النجمة، استبدله مع <em>، إذا كان من الغريب ثم استبدالها </em>، الخ).

ولكن إذا كنت متأكدا من أنك تحتاج فقط لدعم بضعة أنواع بسيطة من العلامات، ثم التعبير العادي لكل قد يكون الحل الأسهل. شيء مثل هذا لالعلامات النجمية، على سبيل المثال (غير مجربة):

preg_replace('/\*([^*]+)\*/', '<em>\\1</em>', $text);

وشيئا من هذا القبيل لخطوط مائلة عكسية.

نصائح أخرى

ما كنت تبحث عن تتم معالجة أكثر شيوعا من قبل جهاز الدولة أو lexer / محلل.

وهذا هو قبيح لكنه يعمل. قبض: فقط لنوع نمط واحد في وقت واحد

$input = "Here's some \\italic\\ text and even \\some more\\ wheee";

$output = preg_replace_callback( "/\\\/", 'replacer', $input );

echo $output;

function replacer( $matches )
{
    static $toggle = 0;
    if ( $toggle )
    {
        $toggle = 0;
        return "</em>";
    }
    $toggle = 1;
    return "<em>";
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top