Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie ersetzt man Lookahead in Regex?

Es gibt zwei Ansätze. Eine besteht darin, einen einzigen Ausdruck zu erstellen, der alle möglichen Alternativen behandelt:

^[a-zA-Z][0-9][a-zA-Z0-9-,._;:]{6,}$
  |
^[a-zA-Z][a-zA-Z0-9-,._;:][0-9][a-zA-Z0-9-,._;:]{5,}$
  |
^[a-zA-Z][a-zA-Z0-9-,._;:]{2}[0-9][a-zA-Z0-9-,._;:]{4,}$

usw. Dies ist ein kombinatorischer Alptraum, aber es würde funktionieren.

Ein viel einfacherer Ansatz besteht darin, denselben String zweimal mit zwei Ausdrücken zu validieren:

^[a-zA-Z0-9-,._;:]{8,}$          # check length and permitted characters

und

[a-zA-Z].*[0-9]|[0-9].*[a-zA-Z]  # check required characters

BEARBEITEN:@briandfoy weist zu Recht darauf hin, dass es effizienter ist, nach jedem erforderlichen Zeichen separat zu suchen:

[a-zA-Z]                         # check for required alpha

und

[0-9]                            # check for required digit