comment échapper expression régulière caractères dans oracle?

Comment échapper les caractères spéciaux de modèle d'expression régulière dans Oracle?

Par exemple, j'ai besoin d'une fonction qui traslates

some.string[with(special)reg-exp]characters

à

some\.string\[with\(special\)reg\-exp\]characters.

En PHP je voudrais utiliser preg_escape(). Est-il Oracle de contrepartie?

Pourquoi je fais cela?

Je suis en train d'écrire une fonction pl/sql qui vérifie si un string est sur le list,of,string,elements.

Voici mon code:

CREATE OR REPLACE 
FUNCTION list_contains(needle_    IN VARCHAR2,
                       haystack_  IN VARCHAR2,
                       separator_ IN VARCHAR2 DEFAULT ',')
RETURN INTEGER
  IS
BEGIN
  IF regexp_like(haystack_, '(^|' || separator_ || ')' || needle_ || '(' || separator_ || '|$)') THEN
    RETURN 1;
  ELSE
    RETURN 0;
  END IF;
END list_contains;

La fonction essentiellement de travaux:

list_conains('eve','john,eve,maria,steve') => 1

Le problème, c'est quand j'essaie de l'appeler avec des valeurs étranges de needle_ ou separator_, comme . ou d'autres chaînes de caractères qui ont une signification spéciale dans les expressions régulières.

list_conains('eve','jean.maria.steve','.') => 1

Comme vous le voyez, il n'y a pas de veille sur la liste, mais la . correspond à la t lettre du nom de steve, alors la fonction renvoie incorrectement 1.

Je sais que je peux remplacer les points manuellement, mais il ya encore beaucoup d'autres regex caractères spéciaux qui vont interférer et je préfère ne pas essayer de faire la liste de tous les caractères de moi-même.

Comment échapper à la needle_ et separator_?

InformationsquelleAutor SWilk | 2013-09-20