Rumah  >  Soal Jawab  >  teks badan

Tukar rentetan seperti *italic* kepada <i>italic</i>, tetapi tidak jika aksara baris baharu berada dalam had asterisk

Saya mempunyai ungkapan biasa berikut dalam kod PHP saya:

// markers for italic set *Text*
if (substr_count($line, '*')>=2)
{
    $line = preg_replace('#\*{1}(.*?)\*{1}#', '<i></i>', $line);
}

Ia berfungsi dengan baik.

Walau bagaimanapun, apabila $line 持有 <br> cth

*This is my text<br>* Some other text

Kemudian regex masih mempertimbangkan teks dan menukarnya kepada:

<i>This is my text<br></i> Some other text

Matlamatnya adalah untuk tidak menterjemah teks jika

ditemui. Bagaimanakah saya boleh melakukan ini menggunakan ungkapan biasa - menggunakan apa yang dipanggil "pandangan negatif" atau bagaimana saya menukar ungkapan biasa sedia ada? <br>

Nota: Rentetan seperti

masih perlu dipertimbangkan dan ditukar. *This is my text*<br>Some other text<br> 和再次 *italic*<br>END

Idea: Atau patutkah saya mengurai

dan kemudian menggunakan regex untuk mengulangi keputusan? ! $line

P粉262073176P粉262073176227 hari yang lalu367

membalas semua(1)saya akan balas

  • P粉396248578

    P粉3962485782024-03-30 20:42:40

    Menggunakan teknik padan apa yang anda tidak mahu dan buang, anda boleh menggunakan ungkapan biasa ini dalam PHP (PCRE):

    \*[^*]*
    \*(*SKIP)(*F)|\*([^*]*)\*

    dan gantikan dengan

    Demonstrasi Ekspresi Biasa

    Kod PHP:

    $r = preg_replace('/\*[^*]*
    \*(*SKIP)(*F)|\*([^*]*)\*/'), "", $input);

    Arahan:

    • *:匹配*
    • [^*]*:匹配 0 个或多个非 * watak

    • :匹配
    • *:匹配结束 *
    • (*SKIP)(*F): kata kerja PCRE untuk membuang dan melangkau perlawanan ini
    • <代码>|: atau
    • *([^*]*)*:匹配 * rentetan tertutup

    balas
    0
  • Batalbalas