Pour une chaîne donnée (généralement un paragraphe), je souhaite remplacer certains mots/phrases, mais les ignorer s'ils sont entourés de balises d'une manière ou d'une autre. Cela doit également être insensible à la casse.
Prenons ceci comme exemple :
You can find a link here <a href="#">link</a> and a lot of things in different styles. Public platform can appear in bold: <b>public platform</b>, and we also have italics here too: <i>italics</i>. While I like soft pillows I am picky about soft <i>pillows</i>. While I want to find fox, I din't want foxes to show up. The text "shiny fruits" is in a span tag: one of the <span>shiny fruits</span>.
Supposons que je veuille remplacer ces mots :
link
:出现 2 次。第一个是纯文本(匹配),第二个是 A
marquer (ignorer)公共平台
:纯文本(匹配,不区分大小写),B
deuxième dans la balise (ignoré) softpillows
: 1 correspondance en texte brut. fox
: 1 correspondance en texte brut. Il visualise des mots complets. fruits
:纯文本(匹配),span
Deuxième dans la balise (ignorée) avec un autre texte En arrière-plan ; je recherche des correspondances d'expressions (pas de mots individuels) et je relie les correspondances à des pages associées.
Je veux éviter le HTML imbriqué (gras non liensdans une the <a href="#">phrase <b>goes</ a> 这里</b>
tag et vice versa) ou d'autres erreurs (par exemple :
J'ai essayé plusieurs choses, comme rechercher une copie nettoyée du texte dont le contenu HTML avait été supprimé, et même si cela m'indiquait qu'il y avait une correspondance, j'ai rencontré un tout nouveau problème de mappage avec le contenu original. 🎜
J'ai trouvé une mention concernant regex négatif lookahead et après m'être cassé la tête, j'ai obtenu cette regex (en supposant que vous ayez VALID appariement de balises html)
Exemple de sortie avec les paramètres par défaut
Pas à pas maintenant
pillowS
,我们就不需要pillow
)w
单词符号、s
空格或n
换行符和 允许以开始结束标记结尾的标点符号 - 我们不需要这个匹配,这里出现了否定的先行
(?![wns>$标点符号]*?)
。在这里我们可以确定匹配不会进入新标签,因为不在描述的序列中(
$excludeOutside
variable de n'importe quelle longueur)$excludeTag
变量与$excludeOutside
基本相同,但适用于$toReplace
可以是 html 标签本身的情况,例如一个
Veuillez noter que ce code ne peut pas écraser le texte avec
或
>
et que l'utilisation de ces symboles peut provoquer un comportement inattendu