Maison  >  Questions et réponses  >  le corps du texte

Convertissez des chaînes telles que *italique* en <i>italique</i>, mais pas si le caractère de nouvelle ligne est dans la limite de l'astérisque.

J'ai l'expression régulière suivante dans mon code PHP :

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

Ça fonctionne très bien.

Cependant, quand $line 持有 <br> par ex.

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

Ensuite, l'expression régulière considère toujours le texte et le convertit en :

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

Le but est de ne pas traduire le texte si

est rencontré. Comment puis-je faire cela à l'aide d'expressions régulières - en utilisant ce qu'on appelle une "anticipation négative" ou comment puis-je modifier l'expression régulière existante ? <br>

Remarque : les chaînes comme

doivent toujours être prises en compte et converties. *This is my text*<br>Some other text<br> 和再次 *italic*<br>END

Idée : Ou devrais-je décomposer

puis utiliser une expression régulière pour parcourir le résultat ? ! $line

P粉262073176P粉262073176177 Il y a quelques jours332

répondre à tous(1)je répondrai

  • P粉396248578

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

    En utilisant la technique faire correspondre ce que vous ne voulez pas et supprimer, vous pouvez utiliser cette expression régulière en PHP (PCRE) :

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

    et remplacez par

    Démonstration d'expression régulière

    Code PHP :

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

    Instructions :

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

    • :匹配
    • *:匹配结束 *
    • (*SKIP)(*F) : verbe PCRE pour écarter et sauter ce match
    • <代码>| : ou
    • *([^*]*)*:匹配 *chaîne ci-jointe

    répondre
    0
  • Annulerrépondre