Malheureusement, le caractère d'expression régulière \b
ne fonctionne pas dans Oracle. b caractère d'expression régulière dans Oracle 11g
Pour contourner ce problème, je trouve l'expression suivante:
(^|\s|\W)(100100|100101|100102|100103)($|\s|\W)
(voir: The missing \b regular expression special character in Oracle.), mais dans les données de chaîne de test:
Test string 100100/100101, ABC-DEF, 100102 100103 test data abc100100 100100abc.
valeurs 100101
et 100103
ne sont pas couvertes, alors que je suis s'attendant à ce qu'ils soient appariés comme c'est le cas de l'expression \b
.
Y at-il un moyen de le faire fonctionner? J'utilise Oracle 11g.
Je serais apprécié pour toute aide.
EDIT:
Mon but est de marquer tous les matches. La sortie que je me attends est:
Test string [ddd]100100[/ddd]/[ddd]100101[/ddd], ABC-DEF, [ddd]100102[/ddd] [ddd]100103[/ddd] test data abc100100 100100abc.
Dans ce but, je me sers déclaration suivante:
regexp_replace(p_text,'(^|\s|\W)(' || l_ids || ')($|\s|\W)', '\1[ddd]\2[/ddd]\3');
Où:
l_ids
- liste des ids séparés par|
, id peut contenir le nombre, les lettres, les traits de soulignement et les tiretsp_text
- saisir le texte
EDIT 2:
Dans la valeur de chaîne de test ci-dessus 100100
ne doit pas correspondre au mot abc100100
ainsi que 100100abc
.
voulez-vous produire des correspondances sur différentes lignes? –
La seconde '(^ | \ s | \ W)' devrait être '($ | \ s | \ W)'. De plus '\ s' est déjà inclus dans' \ W'. Notez que le '/' suivant le premier nombre est consommé par le premier motif et ne peut donc pas être utilisé pour la deuxième correspondance, il est difficile de contourner ce problème sans les retards. –
@vkp s'il vous plaît voir mon edit dans la question. – kpater87