Java: Expresiones Regulares

Aquí hallarás los conceptos que necesitas para trabajar expresiones regulares con Java.

¿Qué es una expresión regular?

Las expresiones regulares existen en todos los lenguajes de programación y nos sirven para realizar con unos pocos caracteres tareas avanzadas de procesamiento de cadenas como:

  • Dividir un texto
  • Buscar en un texto
  • Remplazar en un texto
  • Validar la estructura de un texto

Bloques Unicode

En Java tenemos los bloques unicode, que representan un grupo de caracteres pertenecientes a un bloque de unicode, generalmente agrupados por grupo idiomático.

Ejemplo:

\\p{InGreek}

Lista de grupos de bloques unicode para Java

  1. \\p{InBasic_Latin}: U+0000–U+007F
  2. \\p{InLatin-1_Supplement}: U+0080–U+00FF
  3. \\p{InLatin_Extended-A}: U+0100–U+017F
  4. \\p{InLatin_Extended-B}: U+0180–U+024F
  5. \\p{InIPA_Extensions}: U+0250–U+02AF
  6. \\p{InSpacing_Modifier_Letters}: U+02B0–U+02FF
  7. \\p{InCombining_Diacritical_Marks}: U+0300–U+036F
  8. \\p{InGreek_and_Coptic}: U+0370–U+03FF
  9. \\p{InCyrillic}: U+0400–U+04FF
  10. \\p{InCyrillic_Supplementary}: U+0500–U+052F
  11. \\p{InArmenian}: U+0530–U+058F
  12. \\p{InHebrew}: U+0590–U+05FF
  13. \\p{InArabic}: U+0600–U+06FF
  14. \\p{InSyriac}: U+0700–U+074F
  15. \\p{InThaana}: U+0780–U+07BF
  16. \\p{InDevanagari}: U+0900–U+097F
  17. \\p{InBengali}: U+0980–U+09FF
  18. \\p{InGurmukhi}: U+0A00–U+0A7F
  19. \\p{InGujarati}: U+0A80–U+0AFF
  20. \\p{InOriya}: U+0B00–U+0B7F
  21. \\p{InTamil}: U+0B80–U+0BFF
  22. \\p{InTelugu}: U+0C00–U+0C7F
  23. \\p{InKannada}: U+0C80–U+0CFF
  24. \\p{InMalayalam}: U+0D00–U+0D7F
  25. \\p{InSinhala}: U+0D80–U+0DFF
  26. \\p{InThai}: U+0E00–U+0E7F
  27. \\p{InLao}: U+0E80–U+0EFF
  28. \\p{InTibetan}: U+0F00–U+0FFF
  29. \\p{InMyanmar}: U+1000–U+109F
  30. \\p{InGeorgian}: U+10A0–U+10FF
  31. \\p{InHangul_Jamo}: U+1100–U+11FF
  32. \\p{InEthiopic}: U+1200–U+137F
  33. \\p{InCherokee}: U+13A0–U+13FF
  34. \\p{InUnified_Canadian_Aboriginal_Syllabics}: U+1400–U+167F
  35. \\p{InOgham}: U+1680–U+169F
  36. \\p{InRunic}: U+16A0–U+16FF
  37. \\p{InTagalog}: U+1700–U+171F
  38. \\p{InHanunoo}: U+1720–U+173F
  39. \\p{InBuhid}: U+1740–U+175F
  40. \\p{InTagbanwa}: U+1760–U+177F
  41. \\p{InKhmer}: U+1780–U+17FF
  42. \\p{InMongolian}: U+1800–U+18AF
  43. \\p{InLimbu}: U+1900–U+194F
  44. \\p{InTai_Le}: U+1950–U+197F
  45. \\p{InKhmer_Symbols}: U+19E0–U+19FF
  46. \\p{InPhonetic_Extensions}: U+1D00–U+1D7F
  47. \\p{InLatin_Extended_Additional}: U+1E00–U+1EFF
  48. \\p{InGreek_Extended}: U+1F00–U+1FFF
  49. \\p{InGeneral_Punctuation}: U+2000–U+206F
  50. \\p{InSuperscripts_and_Subscripts}: U+2070–U+209F
  51. \\p{InCurrency_Symbols}: U+20A0–U+20CF
  52. \\p{InCombining_Diacritical_Marks_for_Symbols}: U+20D0–U+20FF
  53. \\p{InLetterlike_Symbols}: U+2100–U+214F
  54. \\p{InNumber_Forms}: U+2150–U+218F
  55. \\p{InArrows}: U+2190–U+21FF
  56. \\p{InMathematical_Operators}: U+2200–U+22FF
  57. \\p{InMiscellaneous_Technical}: U+2300–U+23FF
  58. \\p{InControl_Pictures}: U+2400–U+243F
  59. \\p{InOptical_Character_Recognition}: U+2440–U+245F
  60. \\p{InEnclosed_Alphanumerics}: U+2460–U+24FF
  61. \\p{InBox_Drawing}: U+2500–U+257F
  62. \\p{InBlock_Elements}: U+2580–U+259F
  63. \\p{InGeometric_Shapes}: U+25A0–U+25FF
  64. \\p{InMiscellaneous_Symbols}: U+2600–U+26FF
  65. \\p{InDingbats}: U+2700–U+27BF
  66. \\p{InMiscellaneous_Mathematical_Symbols-A}: U+27C0–U+27EF
  67. \\p{InSupplemental_Arrows-A}: U+27F0–U+27FF
  68. \\p{InBraille_Patterns}: U+2800–U+28FF
  69. \\p{InSupplemental_Arrows-B}: U+2900–U+297F
  70. \\p{InMiscellaneous_Mathematical_Symbols-B}: U+2980–U+29FF
  71. \\p{InSupplemental_Mathematical_Operators}: U+2A00–U+2AFF
  72. \\p{InMiscellaneous_Symbols_and_Arrows}: U+2B00–U+2BFF
  73. \\p{InCJK_Radicals_Supplement}: U+2E80–U+2EFF
  74. \\p{InKangxi_Radicals}: U+2F00–U+2FDF
  75. \\p{InIdeographic_Description_Characters}: U+2FF0–U+2FFF
  76. \\p{InCJK_Symbols_and_Punctuation}: U+3000–U+303F
  77. \\p{InHiragana}: U+3040–U+309F
  78. \\p{InKatakana}: U+30A0–U+30FF
  79. \\p{InBopomofo}: U+3100–U+312F
  80. \\p{InHangul_Compatibility_Jamo}: U+3130–U+318F
  81. \\p{InKanbun}: U+3190–U+319F
  82. \\p{InBopomofo_Extended}: U+31A0–U+31BF
  83. \\p{InKatakana_Phonetic_Extensions}: U+31F0–U+31FF
  84. \\p{InEnclosed_CJK_Letters_and_Months}: U+3200–U+32FF
  85. \\p{InCJK_Compatibility}: U+3300–U+33FF
  86. \\p{InCJK_Unified_Ideographs_Extension_A}: U+3400–U+4DBF
  87. \\p{InYijing_Hexagram_Symbols}: U+4DC0–U+4DFF
  88. \\p{InCJK_Unified_Ideographs}: U+4E00–U+9FFF
  89. \\p{InYi_Syllables}: U+A000–U+A48F
  90. \\p{InYi_Radicals}: U+A490–U+A4CF
  91. \\p{InHangul_Syllables}: U+AC00–U+D7AF
  92. \\p{InHigh_Surrogates}: U+D800–U+DB7F
  93. \\p{InHigh_Private_Use_Surrogates}: U+DB80–U+DBFF
  94. \\p{InLow_Surrogates}: U+DC00–U+DFFF
  95. \\p{InPrivate_Use_Area}: U+E000–U+F8FF
  96. \\p{InCJK_Compatibility_Ideographs}: U+F900–U+FAFF
  97. \\p{InAlphabetic_Presentation_Forms}: U+FB00–U+FB4F
  98. \\p{InArabic_Presentation_Forms-A}: U+FB50–U+FDFF
  99. \\p{InVariation_Selectors}: U+FE00–U+FE0F
  100. \\p{InCombining_Half_Marks}: U+FE20–U+FE2F
  101. \\p{InCJK_Compatibility_Forms}: U+FE30–U+FE4F
  102. \\p{InSmall_Form_Variants}: U+FE50–U+FE6F
  103. \\p{InArabic_Presentation_Forms-B}: U+FE70–U+FEFF
  104. \\p{InHalfwidth_and_Fullwidth_Forms}: U+FF00–U+FFEF
  105. \\p{InSpecials}: U+FFF0–U+FFFF

Grupos Unicode

También existe de manera similar a los bloques unicode los grupos que normalmente encasillan a algunos caracteres especiales.

Ejemplo:

\\p{Letter}{2}

Grupos de captura nombrados

Los grupos de captura nombrados son una característica de las expresiones regulares que permiten poner nombres a los grupos de captura en lugar. Esto puede hacer que sea más fácil de entender y mantener el código que utiliza expresiones regulares, ya que los nombres de los grupos de captura proporcionan una descripción más significativa de lo que se está capturando.

De esta manera podemos transformar de 

([\\w]+)://([\\w.-]+):(\\d+)

a

(?<protocol>[\\w]+)://(?<host>[\\w.-]+):(?<port>\\d+)

E incluso podemos usas esos grupos de captura nombrados en nuestra expresión regular de remplazo

${protocol},${host},${port}

Dónde Probar

He realizado mi propio plugin de expresiones regulares con Java para IntelliJ Idea, no dudes en descargarlo desde la página oficial. Dicho plugin depende de que tengas JavaFX instalado para funcionar.

Tambien puedes descargar una version para escritorio en la seccion de releases del repositorio de codigo opensource que hice para este.

Si usas tu IDE con Java 8 funcionará de maravilla.


  • Cursos de Código Facilito

    Te comparto aquí mis recomendaciones de cursos de Código Facilito. Codigofacilito.com es una plataforma virtual de cursos en idioma exclusivamente español que inició como un canal de YouTube. Opinión de la plataforma En mi opinión la plataforma aún es incipiente y los cursos necesitan más trabajo, ya que es muy común hallarse con clases de…


  • Cursos de LinkedIn Learning

    Te comparto aquí mis recomendaciones de cursos de Linkedin Learning. LinkedIn Learning es una plataforma virtual de cursos propiedad de Microsoft. Hallarás mucho material en inglés, pues prácticamente todos los cursos vienen con subtítulos en castellano y en la parte técnica son muy buenos debido a la adquisición de Lynda.com. En mi opinión la plataforma…


  • Mockito: Snippets de código

    Estos snippets de código para entrevista acerca de mockito espero te sean de mucha utilidad. Claro que también los puedes usar para tu desarrollo en el día a día. Mock básico Si te llegan a mostrar algo como esto es mejor que sospeches, mockito se usa principalmente para pruebas de integración. Si llegas a ver…


javapro.org