2018-10-23 21:01:24 +00:00
|
|
|
---
|
|
|
|
filename: pcre-it.txt
|
|
|
|
contributors:
|
|
|
|
- ["Sachin Divekar", "http://github.com/ssd532"]
|
|
|
|
translators:
|
|
|
|
- ["Christian Grasso", "https://grasso.io"]
|
|
|
|
---
|
|
|
|
|
|
|
|
Un'espressione regolare (regex o regexp in breve) è una speciale stringa
|
|
|
|
utilizzata per definire un pattern, ad esempio per cercare una sequenza di
|
|
|
|
caratteri; ad esempio, `/^[a-z]+:/` può essere usato per estrarre `http:`
|
2019-09-20 04:12:41 +00:00
|
|
|
dall'URL `http://github.com/`.
|
2018-10-23 21:01:24 +00:00
|
|
|
|
|
|
|
PCRE (Perl Compatible Regular Expressions) è una libreria per i regex in C.
|
|
|
|
La sintassi utilizzata per le espressioni è molto simile a quella di Perl, da
|
|
|
|
cui il nome. Si tratta di una delle sintassi più diffuse per la scrittura di
|
|
|
|
regex.
|
|
|
|
|
|
|
|
Esistono due tipi di metacaratteri (caratteri con una funzione speciale):
|
2019-09-20 04:12:41 +00:00
|
|
|
|
2018-10-23 21:01:24 +00:00
|
|
|
* Caratteri riconosciuti ovunque tranne che nelle parentesi quadre
|
2019-09-20 04:12:41 +00:00
|
|
|
|
2018-10-23 21:01:24 +00:00
|
|
|
```
|
|
|
|
\ carattere di escape
|
|
|
|
^ cerca all'inizio della stringa (o della riga, in modalità multiline)
|
|
|
|
$ cerca alla fine della stringa (o della riga, in modalità multiline)
|
|
|
|
. qualsiasi carattere eccetto le newline
|
|
|
|
[ inizio classe di caratteri
|
|
|
|
| separatore condizioni alternative
|
|
|
|
( inizio subpattern
|
|
|
|
) fine subpattern
|
|
|
|
? quantificatore "0 o 1"
|
|
|
|
* quantificatore "0 o più"
|
|
|
|
+ quantificatore "1 o più"
|
|
|
|
{ inizio quantificatore numerico
|
|
|
|
```
|
|
|
|
|
|
|
|
* Caratteri riconosciuti nelle parentesi quadre
|
2019-09-20 04:12:41 +00:00
|
|
|
|
2018-10-23 21:01:24 +00:00
|
|
|
```
|
|
|
|
\ carattere di escape
|
|
|
|
^ nega la classe se è il primo carattere
|
|
|
|
- indica una serie di caratteri
|
|
|
|
[ classe caratteri POSIX (se seguita dalla sintassi POSIX)
|
|
|
|
] termina la classe caratteri
|
2019-09-20 04:12:41 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
PCRE fornisce inoltre delle classi di caratteri predefinite:
|
2018-10-23 21:01:24 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
\d cifra decimale
|
|
|
|
\D NON cifra decimale
|
|
|
|
\h spazio vuoto orizzontale
|
|
|
|
\H NON spazio vuoto orizzontale
|
|
|
|
\s spazio
|
|
|
|
\S NON spazio
|
|
|
|
\v spazio vuoto verticale
|
|
|
|
\V NON spazio vuoto verticale
|
|
|
|
\w parola
|
|
|
|
\W "NON parola"
|
|
|
|
```
|
|
|
|
|
|
|
|
## Esempi
|
|
|
|
|
|
|
|
Utilizzeremo la seguente stringa per i nostri test:
|
2019-09-20 04:12:41 +00:00
|
|
|
|
2018-10-23 21:01:24 +00:00
|
|
|
```
|
|
|
|
66.249.64.13 - - [18/Sep/2004:11:07:48 +1000] "GET /robots.txt HTTP/1.0" 200 468 "-" "Googlebot/2.1"
|
|
|
|
```
|
2019-09-20 04:12:41 +00:00
|
|
|
|
2018-10-23 21:01:24 +00:00
|
|
|
Si tratta di una riga di log del web server Apache.
|
|
|
|
|
|
|
|
| Regex | Risultato | Commento |
|
|
|
|
| :---- | :-------------- | :------ |
|
|
|
|
| `GET` | GET | Cerca esattamente la stringa "GET" (case sensitive) |
|
|
|
|
| `\d+.\d+.\d+.\d+` | 66.249.64.13 | `\d+` identifica uno o più (quantificatore `+`) numeri [0-9], `\.` identifica il carattere `.` |
|
|
|
|
| `(\d+\.){3}\d+` | 66.249.64.13 | `(\d+\.){3}` cerca il gruppo (`\d+\.`) esattamente 3 volte. |
|
|
|
|
| `\[.+\]` | [18/Sep/2004:11:07:48 +1000] | `.+` identifica qualsiasi carattere, eccetto le newline; `.` indica un carattere qualsiasi |
|
|
|
|
| `^\S+` | 66.249.64.13 | `^` cerca all'inizio della stringa, `\S+` identifica la prima stringa di caratteri diversi dallo spazio |
|
|
|
|
| `\+[0-9]+` | +1000 | `\+` identifica il carattere `+`. `[0-9]` indica una cifra da 0 a 9. L'espressione è equivalente a `\+\d+` |
|
|
|
|
|
|
|
|
## Altre risorse
|
|
|
|
[Regex101](https://regex101.com/) - tester per le espressioni regolari
|