Expression régulière pour supprimer les espaces entre les balises HTML non valides - par exemple, "</b>" doit être "</b>"
P粉884667022
P粉884667022 2023-09-02 19:56:28
0
2
509
<p>J'ai du code HTML qui est gâché par des espaces dans les balises et je souhaite le rendre à nouveau valide - par exemple : </p> <pre class="brush:php;toolbar:false;">< div class='test' >1 > 0 est < b >true</ b> bananes&Lt / div >≪/pre> <p> doit être converti en HTML valide et, une fois rendu, devrait produire : </p> <p> <pre class="snippet-code-html lang-html Prettyprint-override"><code><div class='test'>1 > 0 est <b>true</b> >>> bananes</div></code></pre> </p> <p>Tout texte précédé/suivi d'espaces dans <code>></code> ou </code>><</code> doit rester inchangé ; par exemple, <code> ;1 > 0</code> doit être conservé au lieu d'être compressé en <code>1>0</code></p > <p>Je réalise que cela peut nécessiter plusieurs expressions régulières, ce qui est très bien</p> <p>J'ai quelques éléments :</p> <p><code><s?/s*</code> Cela corrigera partiellement <code></ b></ div ></code> ;/b></div ></code> mais je travaille sur le reste< <p>Par exemple, je pourrais adopter une approche drastique, mais cela briserait également le code dans la partie texte de l'étiquette, et non le nom de l'étiquette lui-même</p>
P粉884667022
P粉884667022

répondre à tous(2)
P粉323050780

Il n'existe aucun moyen raisonnable de sauvegarder un document aussi corrompu que celui que vous avez publié, mais en supposant que vous mettiez > 和类似字符替换为其相关实体,例如: &gt ; dans le texte, vous pouvez mettre le document que vous souhaitez accepter dans une bibliothèque appropriée telle que DomDocument qui se chargera de le repos.

$input = <<<_E_
< div class='test' >1 > 0 is < b >true</ b> and apples >>> bananas< / div >
_E_;

$input = preg_replace([ '#<\s+#', '#</\s+#' ], [ '<', '</' ], $input);

$d = new DomDocument();
$d->loadHTML($input, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

var_dump($d->saveHTML());

Sortie :

string(80) "<div class="test">1 > 0 is <b>true</b> and apples >>> bananas</div>"
P粉064448449

Cette regex fonctionne également :

Il divise la partie valide de la balise HTML en quatre parties et remplace les parties restantes (espaces) par celles-ci.

Démo Regex101

/(]*S)s*(>)/g

  • ( - Capture équerre d'ouverture (section 1)
  • s* - s'adapte à n'importe quel espace
  • (/?) - Capture des barres obliques inverses facultatives (Partie 2)
  • s* - correspond à n'importe quel espace après une barre oblique inverse
  • ([^]*S) - Capturez le contenu dans les balises sans espaces de fin (section 3)
  • s* - Correspond aux espaces après le contenu et avant le crochet droit
  • (>) - Capturer l'équerre droite (section 4)

const reg = /(<)\s*(\/?)\s*([^<>]*\S)\s*(>)/g
const str = "< div class='test' >1 > 0 is < b >true< / b > and apples >>> bananas< / div  >"
const newStr = str.replace(reg, "");
console.log(newStr);
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal