Regular Expressions Gruppi di acquisizione di base


Esempio

Un gruppo è una sezione di un'espressione regolare racchiusa tra parentesi () . Questo è comunemente chiamato "sottoespressione" e ha due scopi:

  • Rende atomica la sottoespressione, cioè corrisponderà, fallirà o ripeterà nel suo complesso.
  • La porzione di testo che corrisponde è accessibile nel resto dell'espressione e nel resto del programma.

I gruppi sono numerati nei motori regex, a partire da 1. Tradizionalmente, il numero massimo di gruppi è 9, ma molti aromi regex moderni supportano un numero maggiore di gruppi. Il gruppo 0 corrisponde sempre all'intero pattern, allo stesso modo in cui circolerebbe l'intera regex con parentesi.

Il numero ordinale aumenta con ciascuna parentesi di apertura, indipendentemente dal fatto che i gruppi siano posizionati uno dopo l'altro o nidificati:

foo(bar(baz)?) (qux)+|(bla)
   1   2       3      4

gruppi e loro numeri

Dopo che un'espressione raggiunge una corrispondenza generale, tutti i suoi gruppi saranno in uso, indipendentemente dal fatto che un particolare gruppo sia riuscito a combinare qualcosa.

Un gruppo può essere facoltativo, come (baz)? sopra, o in una parte alternativa dell'espressione che non è stata utilizzata per la corrispondenza, come (bla) sopra. In questi casi, i gruppi non corrispondenti semplicemente non conterranno alcuna informazione.

Se un quantificatore viene posizionato dietro un gruppo, come in (qux)+ sopra, il numero complessivo di gruppi dell'espressione rimane lo stesso. Se un gruppo corrisponde a più di una volta, il suo contenuto sarà l'ultima occorrenza della partita. Tuttavia, i sapori regex moderni consentono di accedere a tutte le occorrenze di sub-match.


Se si desidera recuperare la data e il livello di errore di una voce del registro come questa:

2012-06-06 12:12.014 ERROR: Failed to connect to remote end

Potresti usare qualcosa come questo:

^(\d{4}-\d{2}-\d{2}) \d{2}:\d{2}.\d{3} (\w*): .*$

Ciò estrarrebbe la data della voce di registro 2012-06-06 come gruppo di acquisizione 1 e il livello di errore ERROR come gruppo di acquisizione 2.