Espressioni Regolari      prof. Marcello Missiroli       (Itis Corni. Modena)
sa sono le espressioni regol
sa sono le espressioni regol        RegExp per gli amici
descrivono strutture allinter
per cercare e modificare le
eate negli anni 50ormalizzate da Stephen Cole Kleene esistono vari dialetti
Perché usarle?
Perché usarle?nto potente nelle mani di ogni programmatore (specie in
Perché usarle?nto potente nelle mani di ogni programmatore (specie in
Perché usarle?nto potente nelle mani di ogni programmatore (specie ine sostituzione semplice e banale....
Perché usarle?         ..ma bisogna "vedere" la struttura!
Ma soprattutto vi trasforma da così..
a così!
Learning by example
Caratteri/salve/          si:                 "salve"                 "salve a tutti"                 "E la salvezza"     ...
Sequenza di "escape"//(salve)//         si:                  "/(salve)/"                  no:                  "salve"    ...
Alternative/en|it|fr|de/   si:                "en"                "it"                "fritte"                no:         ...
Raggruppamenti/(it|fr)_(IT|CH)/          si:                           "it_IT"                           "it_CH"          ...
Ancoraggio/^(it|fr|en|de)$/      si:                       "it"                       "en"                       "fr"  Ini...
Scelta di caratteri/salv[eoa]/    si:               "salve"               "salva"               "salvo"               no: ...
Scelta di caratteri/^Cl. [1-5]BInfo/   si:                    "Cl. 4BInfo"                    "Cl. 5BInformatica"         ...
Scelta di caratteri: complemento/^Cl. [^1-5]BInfo/   si:                     "Cl. 0BInfo"                     "Cl. 6BInfor...
Scelte condizionate    /Iron(?=man)/                    si:                                 "Ironman"                     ...
Scelte condizionate     /(?<=Iron)man/               si:                                 "Ironman"                        ...
Scelta di caratteri: "word class"     /^w$/                          si:                                     "a"          ...
Scelta di caratteri:altre classi/s/           Spazio bianco (anche tab)               ""/W/           Non-parola          ...
Scelta di caratteri: qualsiasi/^......$/     si:               "abacab"               "123/56"               no:          ...
Qualsiasi quantità (anche 0)/^d*$/       si:              "123456"              ""              no:              "1a"
Qualsiasi quantità (minimo 1)/^d+$/       si:              "123456"              no:              "1a"              ""
Uno o nessuno/^pera?$/   si:            "pera"            "pere"            "per"            no:            "peraa"
Specificare la quantità/^059-d{7}$/     (esattamente sette)                  "059-5556734"/^059-d{6,7}$/   (da sei a sette...
Attenti...operatori avidi!/_(+*)_/               "_bla_ _bla_"
Attenti...operatori avidi!      /_(+*)_/                                      "_bla_ _bla_"                               ...
Attenti...operatori avidi!/_(.+?)_/                    "_bla_ _bla_"                     ^^^^^Ora si ferma qui!Usare +? pe...
Gruppi catturati
Di che si tratta?uò essere riutilizzato subito o in seguito per manipolarei dipende dal linguaggio usato.
Esempio<a href="http://test.com">test</a>Applichiamo a questo testo lespressione<a href="/(.*?)">(.*?)</a>/l sistema scomp...
Esempiousare questi gruppi come blocchi del Lego e costruire il risultato che cn PHP, <a href="/)(.*?)(">)(.*?)(</a>),$1.$...
Nomi dei gruppi catturatiIl nome dato ad ogni gruppo dipende dal linguaggio utilizzato Gruppo 1   PHP   .NET   Perl    Rub...
Nome del gruppo trovatoEsiste anche il "gruppo 0", ovvero lintero testo trovato    Gruppo 1   PHP   .NET   Perl   Ruby   s...
Di che si tratta?uò essere riutilizzato subito o in seguito per manipolarei dipende dal linguaggio usato.
Regex in azionee/o programmi hanno supporto per        Sono facili da usare!
Putroppo...no supporto diretto per le RegEx op
Esempio: ruby#!/usr/bin/rubyphone = "2004-959-559# Togli tutto tranne i numeriphone = phone.gsub!(/D/, "")#ora la variabil...
Esempio: grepricerca di righe in "files" che contengonogrep strano files        ...la parola stranogrep ^strano files     ...
Esempio: Javascriptvar espressione = /^[a-z0-9]/;var stringa = "Unastringa";if (!espressione.test(stringa)){ document.writ...
Esempio: grepricerca di righe che contengonogrep strano file       ...la parola stranogrep ^strano files    ...solo a iniz...
Esempio: Javal titolo di una pagina HTML"(?i)(<title.*?>)(.+?)(</title>)";dated = EXAMPLE_TEST.replaceAll(pattern, "$2");s...
Esempio: Javagex.Matcher; import java.util.regex.Pattern;xTestPatternMatcher {inal String EXAMPLE_TEST = "This is my small...
Esempio: C++ard per le regex. Occorre studiarsi la versionece(str, rx, replacement);
6 “ricette”Non perfette al 100%, utili come base di lavoro
1. Email valida?_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+
2. Username valido?/^[a-zd_]{5,20}$/
3. Indirizzo IP?0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4
4. Carta di credito?3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-
5. URL?s|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):
6. Codice Fiscale?abcdehlmprstABCDEHLMPRST]{1}[0-9]{2}([a-zA-Z]{1}[
Imparate le BASI!Ci sono cose nella vita che bisogna per forza imparare..
Imparate le BASI!Ci sono cose nella vita che bisogna per forza imparare..Per tutto il resto cè
SitografiaRaj Kissu Rajandran: "regular-expressions-101"Lars Vogel: "JavaRegularExpressions"Brigitte Nellinek: "regular-ex...
Licenza
Upcoming SlideShare
Loading in …5
×

Espressioni regolari

1,081 views
879 views

Published on

Una introduzione alle Espressioni regolari, com molti esempi.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,081
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Espressioni regolari

  1. 1. Espressioni Regolari prof. Marcello Missiroli (Itis Corni. Modena)
  2. 2. sa sono le espressioni regol
  3. 3. sa sono le espressioni regol RegExp per gli amici
  4. 4. descrivono strutture allinter
  5. 5. per cercare e modificare le
  6. 6. eate negli anni 50ormalizzate da Stephen Cole Kleene esistono vari dialetti
  7. 7. Perché usarle?
  8. 8. Perché usarle?nto potente nelle mani di ogni programmatore (specie in
  9. 9. Perché usarle?nto potente nelle mani di ogni programmatore (specie in
  10. 10. Perché usarle?nto potente nelle mani di ogni programmatore (specie ine sostituzione semplice e banale....
  11. 11. Perché usarle? ..ma bisogna "vedere" la struttura!
  12. 12. Ma soprattutto vi trasforma da così..
  13. 13. a così!
  14. 14. Learning by example
  15. 15. Caratteri/salve/ si: "salve" "salve a tutti" "E la salvezza" no: "sale" "Salve""salv<b>e</b>"
  16. 16. Sequenza di "escape"//(salve)// si: "/(salve)/" no: "salve" "(salve)"
  17. 17. Alternative/en|it|fr|de/ si: "en" "it" "fritte" no: "darf"
  18. 18. Raggruppamenti/(it|fr)_(IT|CH)/ si: "it_IT" "it_CH" "fr_IT"Due gruppi indipendenti! no: "it_it"
  19. 19. Ancoraggio/^(it|fr|en|de)$/ si: "it" "en" "fr" Inizio e fine riga no: "italia"
  20. 20. Scelta di caratteri/salv[eoa]/ si: "salve" "salva" "salvo" no: "salv" "salvoa""salvè"
  21. 21. Scelta di caratteri/^Cl. [1-5]BInfo/ si: "Cl. 4BInfo" "Cl. 5BInformatica" no: "BInfo" "Cl. 6Binfo"
  22. 22. Scelta di caratteri: complemento/^Cl. [^1-5]BInfo/ si: "Cl. 0BInfo" "Cl. 6BInformatica" no: "Cl. 3Binfo"
  23. 23. Scelte condizionate /Iron(?=man)/ si: "Ironman" no: "Iron"che in versione negativa, usando (?!man)
  24. 24. Scelte condizionate /(?<=Iron)man/ si: "Ironman" no: "man"che in versione negativa, usando (?<!man) "Iron"
  25. 25. Scelta di caratteri: "word class" /^w$/ si: "a" "_" no:quello che può costituire un nome di variabile "("
  26. 26. Scelta di caratteri:altre classi/s/ Spazio bianco (anche tab) ""/W/ Non-parola ")"/D/ Non-numero "a"/S/ Non-spazio bianco "="
  27. 27. Scelta di caratteri: qualsiasi/^......$/ si: "abacab" "123/56" no: "("
  28. 28. Qualsiasi quantità (anche 0)/^d*$/ si: "123456" "" no: "1a"
  29. 29. Qualsiasi quantità (minimo 1)/^d+$/ si: "123456" no: "1a" ""
  30. 30. Uno o nessuno/^pera?$/ si: "pera" "pere" "per" no: "peraa"
  31. 31. Specificare la quantità/^059-d{7}$/ (esattamente sette) "059-5556734"/^059-d{6,7}$/ (da sei a sette) "059-555673"
  32. 32. Attenti...operatori avidi!/_(+*)_/ "_bla_ _bla_"
  33. 33. Attenti...operatori avidi! /_(+*)_/ "_bla_ _bla_" ^^^^^ova la stringa più lunga possibile! ^^^^^^^ ^^^^^^^^^^^
  34. 34. Attenti...operatori avidi!/_(.+?)_/ "_bla_ _bla_" ^^^^^Ora si ferma qui!Usare +? per renderlo meno avido!
  35. 35. Gruppi catturati
  36. 36. Di che si tratta?uò essere riutilizzato subito o in seguito per manipolarei dipende dal linguaggio usato.
  37. 37. Esempio<a href="http://test.com">test</a>Applichiamo a questo testo lespressione<a href="/(.*?)">(.*?)</a>/l sistema scompone la stringa in cinque gruppi, in questo modo:<a href="http://test.com">test</a>l sistema scompone la stringa in cinque gruppi, numerandoli da 1 a 5
  38. 38. Esempiousare questi gruppi come blocchi del Lego e costruire il risultato che cn PHP, <a href="/)(.*?)(">)(.*?)(</a>),$1.$2.$3.$2.$5 , "<a href="http://test.cotest.com">http://test.com</a>
  39. 39. Nomi dei gruppi catturatiIl nome dato ad ogni gruppo dipende dal linguaggio utilizzato Gruppo 1 PHP .NET Perl Ruby sed Javascript 1 X X X X $1 X X X X ${1} X X X
  40. 40. Nome del gruppo trovatoEsiste anche il "gruppo 0", ovvero lintero testo trovato Gruppo 1 PHP .NET Perl Ruby sed Javascript 0 X X $0 X X. ${0} X X X & X $& X X X
  41. 41. Di che si tratta?uò essere riutilizzato subito o in seguito per manipolarei dipende dal linguaggio usato.
  42. 42. Regex in azionee/o programmi hanno supporto per Sono facili da usare!
  43. 43. Putroppo...no supporto diretto per le RegEx op
  44. 44. Esempio: ruby#!/usr/bin/rubyphone = "2004-959-559# Togli tutto tranne i numeriphone = phone.gsub!(/D/, "")#ora la variabile numero è uguale a2004959559
  45. 45. Esempio: grepricerca di righe in "files" che contengonogrep strano files ...la parola stranogrep ^strano files ...solo a inizio rigagrep strano$ files ...solo a fine rigagrep ^strano$ files ...solo la parola stranogrep [Ss]trano files ... strano o Stranogrep ^$ files ... righe vuotegrep [0-9][0-9] file ... coppie di cifre
  46. 46. Esempio: Javascriptvar espressione = /^[a-z0-9]/;var stringa = "Unastringa";if (!espressione.test(stringa)){ document.write("La stringa non è valida!"); }----------------------------------------------------var string2="(304)434-5454"parsestring2=string2.replace(/[()-]/g, "")//restituisce "3044345454", toglie "(", ")", e "-")
  47. 47. Esempio: grepricerca di righe che contengonogrep strano file ...la parola stranogrep ^strano files ...solo a inizio rigagrep strano$ files ...solo a fine rigagrep ^strano$ files ...solo la parola stranogrep [Ss]trano files ... strano o Strano grepgrep ^$ files ... righe vuotegrep [0-9][0-9] file ... coppie di cifre
  48. 48. Esempio: Javal titolo di una pagina HTML"(?i)(<title.*?>)(.+?)(</title>)";dated = EXAMPLE_TEST.replaceAll(pattern, "$2");sce true se la stringa è esattamente "True" o "true, "Yesolean isTrueOrYes(String s){s.matches("[tT]rue|[yY]es"); }
  49. 49. Esempio: Javagex.Matcher; import java.util.regex.Pattern;xTestPatternMatcher {inal String EXAMPLE_TEST = "This is my small example string which Im going to use for pvoid main(String[] args) {pattern = Pattern.compile("w+",CASE_INSENSITIVE); matcher = pattern.matcher(EXAMPLE_TEST); lla tutte le occorenzeatcher.find()) { em.out.print("Start index: " + matcher.start()); em.out.print(" End index: " + matcher.end() + " "); em.out.println(matcher.group());} sci tutt gli spazi con tabi eplace = Pattern.compile("s+"); matcher2 = replace.matcher(EXAMPLE_TEST);out.println(matcher2.replaceAll("t")); } }
  50. 50. Esempio: C++ard per le regex. Occorre studiarsi la versionece(str, rx, replacement);
  51. 51. 6 “ricette”Non perfette al 100%, utili come base di lavoro
  52. 52. 1. Email valida?_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+
  53. 53. 2. Username valido?/^[a-zd_]{5,20}$/
  54. 54. 3. Indirizzo IP?0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4
  55. 55. 4. Carta di credito?3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-
  56. 56. 5. URL?s|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):
  57. 57. 6. Codice Fiscale?abcdehlmprstABCDEHLMPRST]{1}[0-9]{2}([a-zA-Z]{1}[
  58. 58. Imparate le BASI!Ci sono cose nella vita che bisogna per forza imparare..
  59. 59. Imparate le BASI!Ci sono cose nella vita che bisogna per forza imparare..Per tutto il resto cè
  60. 60. SitografiaRaj Kissu Rajandran: "regular-expressions-101"Lars Vogel: "JavaRegularExpressions"Brigitte Nellinek: "regular-expressions-eine-einfhrung"Compago.it: "esempi-pratici-di-espressioni-regolari"
  61. 61. Licenza

×