Passa al contenuto principale
Workday User Guide
Ultimo aggiornamento: 2023-06-23
Gruppi di acquisizione espressioni regolari

Gruppi di acquisizione espressioni regolari

È possibile utilizzare una coppia di parentesi attorno a un modello secondario in un'espressione regolare per definire un
gruppo
. È possibile utilizzare i gruppi di espressioni regolari per:
  • Applicare gli operatori regex e i quantificatori a un intero gruppo contemporaneamente.
  • Creare un gruppo di acquisizione.
    È possibile utilizzare i gruppi di acquisizione per specificare i valori corrispondenti da salvare o restituire dall'espressione regolare. Per impostazione predefinita, un gruppo
    acquisisce
    il testo che produce una corrispondenza. La parte della stringa che corrisponde alla sottoespressione raggruppata viene acquisita in memoria per essere recuperata o utilizzata in seguito.
  • Creare un gruppo di non acquisizione.

Numerazione gruppi

Un'espressione regolare può avere più di un gruppo e i gruppi possono essere nidificati. I gruppi sono numerati da 1
a n
da sinistra a destra, a partire dalla prima parentesi aperta. È sempre presente un gruppo implicito zero (0), che contiene l'intera corrispondenza. Esempio:
(a(b*))+(c)
Questo modello contiene tre gruppi:
group 1: (a(b*)) group 2: (b*) group 3: (c)

Gruppi di acquisizione e la funzione REGEX

È possibile utilizzare
REGEX
per estrarre una parte di una stringa. Il
REGEX
La funzione restituisce solo il valore del
primo
gruppo di acquisizione.
Si supponga di avere un nome di campo chiamato
e-mail
che contiene indirizzi e-mail con il seguente schema:
username
@
provider
.
dominio
. È possibile utilizzare
REGEX
per restituire solo la parte
del provider
dell'indirizzo e-mail dal campo
e-mail
:
REGEX([email],"^[a-zA-Z0-9._%+-]+@
([a-zA-Z0-9._-]+)
\.[a-zA-Z]{2,4}$")

Gruppi di acquisizione e la funzione REGEX_REPLACE

È possibile utilizzare
REGEX_REPLACE
per abbinare una stringa e sostituire le stringhe corrispondenti con un altro valore. Il
REGEX_REPLACE
La funzione accetta 3 argomenti:
  • Stringa di input
  • Espressione regolare corrispondente
  • Espressione regolare sostitutiva
È possibile utilizzare i gruppi di acquisizione per acquisire i backreference, ma viene sempre restituita l'intera corrispondenza.

Acquisizione di gruppi e backreference

È possibile utilizzare un riferimento a ritroso per fare riferimento al contenuto abbinato di un determinato numero di gruppo di acquisizione. In genere, si utilizza un riferimento a ritroso nella stessa espressione regolare che contiene il gruppo di acquisizione. Si specifica un riferimento a ritroso facendo riferimento al numero del gruppo preceduto da una barra inversa. Utilizzare
\1
per fare riferimento al gruppo di acquisizione 1,
\2
per fare riferimento al gruppo di acquisizione 2 e così via.
Si supponga di voler abbinare una coppia di tag HTML e il relativo testo racchiuso. È possibile acquisire il tag di apertura in un gruppo di acquisizione e quindi utilizzare un riferimento a ritroso per abbinare il tag di chiusura corrispondente:
(
<
([A-Z][A-Z0-9]*)
\b[^>]*>.*?</
\2
>
)
Questa espressione regolare contiene due gruppi di acquisizione:
  • Il gruppo 1 contiene le parentesi più esterne e acquisisce l'intera stringa.
  • Il gruppo 2 acquisisce la stringa corrispondente a
    [A-Z][A-Z0-9]*
    .
È quindi possibile fare riferimento al gruppo 2 utilizzando
\2
backreference in modo che corrisponda al tag HTML di chiusura corrispondente.
Quando si utilizza il
REGEX_REPLACE
è possibile utilizzare un riferimento a ritroso per fare riferimento a un gruppo di acquisizione nell'espressione regolare
precedente
. La sintassi è leggermente diversa quando si utilizza un riferimento a ritroso per fare riferimento a un gruppo nell'espressione regolare precedente. Utilizzare il simbolo del dollaro (
$
) prima del numero del gruppo, ad esempio
$1
per specificare un riferimento a ritroso al gruppo 1 dell'espressione precedente.
Si supponga di avere un campo
phone_number
in cui i valori sono formattati come
xxx.xxx.xxxx
. L'esempio seguente abbina i valori in
phone_number
e li sostituisce con valori formattati come
(xxx) xxx-xxxx
:
REGEX_REPLACE([phone_number],"([0-9]{3})\.([[0-9]]{3})\.([[0-9]]{4})","
\($1\) $2-$3
")
Notare i riferimenti a ritroso nell'espressione di sostituzione. Si riferiscono ai gruppi di acquisizione dell'espressione corrispondente precedente.

Gruppi non di acquisizione

In alcuni casi, è possibile utilizzare le parentesi per raggruppare i sottomodelli, ma
non
per acquisire il testo. Un gruppo non di acquisizione inizia con
(?:
(un punto interrogativo e due punti dopo la parentesi aperta). Ad esempio,
h(?:a|i|o)t
corrispondenze
hat
o
hit
o
hot
, ma non acquisisce il
a
,
i
, o
o
dalla sottoespressione.