Enlever de simples Balises HTML de Chaîne dans Oracle via RegExp, l'Explication nécessaire
Je ne comprends pas, pourquoi mes colonnes reg1 et reg2 suppression de "bbb" à partir de ma chaîne, et seulement reg3 fonctionne comme prévu.
WITH t AS (SELECT 'aaa <b>bbb</b> ccc' AS teststring FROM dual)
SELECT
teststring,
regexp_replace(teststring, '<.+>') AS reg1,
regexp_replace(teststring, '<.*>') AS reg2,
regexp_replace(teststring, '<.*?>') AS reg3
FROM t
TESTSTRING REG1 REG2 REG3
aaa <b>bbb</b> ccc aaa ccc aaa ccc aaa bbb ccc
Merci beaucoup!
Vous devez vous connecter pour publier un commentaire.
Parce que la regex est gourmand par défaut. I. e. les expressions
.*
ou.+
essayer de prendre autant de caractères que possible. Donc<.+>
va s'étendre à partir de la première<
à la dernière>
. Rendre paresseux en utilisant le paresseux opérateur?
:ou
Maintenant, la recherche de
>
s'arrêtera à la première>
rencontrés.Noter que
.
comprend>
ainsi, par conséquent, la gourmande variante (sans?
) avale toutes les>
mais le dernier.Parce que la première et la deuxième sont à la recherche de ce match:
<b>bbb</b>
- dans ce casb>bbb</b
correspond à la fois à.*
et.+
La troisième un seul aussi à ne pas faire ce que vous avez besoin. Vous êtes à la recherche de quelque chose comme ceci:
<[^>]*>
. Mais vous avez aussi besoin de remplacer toutes les correspondances avec ""Si vous êtes simplement à essayer d'afficher la chaîne de caractères sans les balises HTML, vous pouvez utiliser la fonction:
utl_i18n.unescape_reference(nom_colonne)