Heim  >  Fragen und Antworten  >  Hauptteil

Konvertieren Sie Zeichenfolgen wie *kursiv* in <i>kursiv</i>, jedoch nicht, wenn das Zeilenumbruchzeichen innerhalb der Sternchenbeschränkung liegt

Ich habe den folgenden regulären Ausdruck in meinem PHP-Code:

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

Es funktioniert großartig.

Wenn $line 持有 <br> z.B

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

Dann berücksichtigt die Regex den Text noch und wandelt ihn um in:

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

Das Ziel besteht darin, den Text nicht zu übersetzen, wenn

auftritt. Wie mache ich das mit regulären Ausdrücken – mit dem sogenannten „negativen Lookahead“ oder wie ändere ich den vorhandenen regulären Ausdruck? <br>

Hinweis: Zeichenfolgen wie

sollten dennoch berücksichtigt und konvertiert werden. *This is my text*<br>Some other text<br> 和再次 *italic*<br>END

Idee: Oder sollte ich zerlegen

und dann Regex verwenden, um das Ergebnis zu durchlaufen? ! $line

P粉262073176P粉262073176227 Tage vor371

Antworte allen(1)Ich werde antworten

  • P粉396248578

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

    使用匹配你不想要的内容并丢弃技术,您可以在 PHP (PCRE) 中使用此正则表达式:

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

    并替换为$1

    正则表达式演示

    PHP 代码:

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

    说明:

    • \*:匹配*
    • [^*]*:匹配 0 个或多个非 * 字符

    • :匹配
    • \*:匹配结束 *
    • (*SKIP)(*F):要丢弃并跳过此匹配的 PCRE 动词
    • <代码>|:或
    • \*([^*]*)\*:匹配 *s 括起来的字符串

    Antwort
    0
  • StornierenAntwort