2016-04-26 1 views

Répondre

3

Compte tenu de la oracle doc:

Tableau 4-2 répertorie la liste des méta-caractères pris en charge pour une utilisation dans les expressions régulières transmises à SQL fonctions d'expressions régulières et les conditions. Ces méta-caractères sont conformes à la norme POSIX; toute différence de comportement par rapport à la norme est notée dans la colonne "Description".

Et jeter un oeil à la valeur | dans le tableau:

L'expression a | b correspond à caractère ou un caractère b.

Jeter un oeil à la posix doc:

priorité de l'opérateur L'ordre de priorité pour les opérateurs est la suivante:

  1. symboles de support liés nom_classement [==] [ ::] [..]

  2. Caractères évasés \

  3. jeu de caractères (expression entre crochets) []

  4. groupement()

  5. duplication à caractère unique-ERE * +? {M, n}

  6. Enchaînement

  7. ^Ancrages

    $
  8. Alternance |

Je dirais donc que H|ha+ serait le même que (?:H|ha+)

+0

: en (? ...) n'est pas la syntaxe Oracle. – mathguy

+1

@mathguy Je suis d'accord mais je voulais montrer que ce n'est pas la même chose que '(H | ha +)' parce qu'il n'y avait pas de groupe de capture –

+1

Comme l'a montré Thomas, l'alternance (l'opérateur |) a la priorité la plus basse. Une recherche d'expression rationnelle avec H | ha + essayera d'abord avec H, et seulement si elle ne trouve pas de correspondance (après avoir essayé toutes les combinaisons indiquées par d'autres opérateurs), elle essaiera de nouveau avec ha + au lieu de H. Le + est un opérateur unaire, il s'attache à un seul et la gourmandise s'applique. – mathguy