JavaRush /Blog Java /Random-ES /Expresiones regulares en Java
terranum
Nivel 28
Milan

Expresiones regulares en Java

Publicado en el grupo Random-ES
expresión regularUna expresión regular es una especie de patrón que se puede aplicar a un texto (String, en Java). Java proporciona el paquete java.util.regex para hacer coincidir expresiones regulares. Las expresiones regulares son muy similares al lenguaje de programación Perl y son muy fáciles de aprender. Una expresión regular coincide con el texto (parte de él) o no. * Si una expresión regular coincide con un fragmento de texto, entonces podemos encontrarlo. ** Si la expresión regular es compuesta, podemos determinar fácilmente qué parte de la expresión regular coincide con qué parte del texto.

Primer ejemplo

La expresión regular " [a-z] +" coincide con todas las letras minúsculas del texto. [a-z]significa cualquier carácter desde ahasta zinclusive y +significa "uno o más" caracteres. Supongamos que proporcionamos la cadena "código 2 aprender tutorial de Java". Cómo hacer esto en Java Primero, debes crear una plantilla:
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
A continuación tienes que crear matcherpara el texto enviando un mensaje en el diagrama:
Matcher m = p.matcher(“code 2 learn java tutorial”);
NOTA: Tampoco tenemos constructores Pattern, Matcherlos creamos usando métodos de clase Pattern. Pattern Class:El objeto de clase constituye una representación de una expresión regular. La clase Pattern no proporciona ningún constructor público. Para crear una plantilla, primero debe llamar a uno de los métodos estáticos públicos, que luego devuelve un objeto de la clase Pattern. Estos métodos toman una expresión regular como argumento. Matcher Class:El objeto Finder es un motor que interpreta el patrón y realiza operaciones de coincidencia en la cadena de entrada. Como Patternuna clase, Matcherno tiene constructores públicos. Se obtiene un objeto Matcherllamando a un método matcheren un objeto de clase Pattern. Una vez que hayamos completado estos pasos, y ahora tengamos una instancia de la clase Matcher m , ahora podemos verificar si se encontró el patrón o no y, de ser así, en qué posición, etc. m.matches()Devuelve verdadero si el patrón coincide con toda la cadena; falso en caso contrario. m.lookingAt()Devuelve verdadero si el patrón coincide con el comienzo de la cadena; falso en caso contrario. m.find ()devuelve verdadero si el patrón coincide con alguna parte del texto.

Encontrar una coincidencia

Después de una coincidencia exitosa, m.start() devolverá el índice del primer carácter coincidente y m.end() devolverá el índice del último carácter coincidente, más uno. Si se realizó un intento fallido y no se encontró ninguna coincidencia , m.start()arrojaránm.end()IllegalStateException
  • Esto es RuntimeExceptionpara que no tengas que pillarlo.
Puede parecer extraño m.end()devolver el índice del último carácter coincidente más uno, pero eso es exactamente lo que hacen la mayoría de los archivos String.
  • Por ejemplo,“Now is the time“.substring(m.start(), m.end())
devolverá la misma cadena. Echemos un vistazo al código:
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

Métodos adicionales

Si hay una coincidencia, entonces:
  • m.replaceFirst(replacement)devuelve una nueva cadena, donde la primera subcadena que coincida con el patrón será reemplazada porreplacement
  • m.replaceAll(replacement)devuelve una nueva cadena, donde cada subcadena que coincida con el patrón será reemplazada
  • m.find(StartIndex)encontrar la siguiente coincidencia comenzando en el índice especificado
  • m.reset()restablece la plantilla
  • m.reset(NewText)restablece el buscador y le da un nuevo texto (tal vez String, StringBuffero CharBuffer)

Sintaxis de expresión regular

  • ^Coincide con el comienzo de una línea.
  • $Coincide con el final de la cuerda.
  • .Coincide con cualquier carácter excepto nueva línea. El uso de la opción m le permite hacer coincidir una nueva línea.
  • [...]Coincide con cualquier carácter entre paréntesis.
  • [^ ...]Coincide con cualquier carácter que no esté entre paréntesis.
  • \AComienza toda la línea.
  • \zFin de toda la línea.
  • \ZEl final de toda la línea excepto el terminador de línea final.
  • re*Coincide con 0 o más apariciones de la expresión anterior.
  • re+Una o más coincidencias de la expresión anterior.
  • re?Coincide con 0 o 1 con la ubicación de la expresión anterior.
  • re{n} Соответствует ровно N Количество вхождений предшествующего выражения.
  • re{n,} Соответствует N o более вхождений предшествующего выражения.
  • re{n, m} Соответствует не менее n и не более m вхождений предыдущего выражения.
  • a|b Соответствует a o b.
  • (re) Группа регулярных выражений и помнящая найденный текст.
  • (?: re) Группы регулярных выражений, не помнящая найденный текст.
  • (?> re) Соответствует независимому шаблону без возвратов.
  • \w Соответствует буквам и цифрам [a-zA-Z_0-9].
  • \W Это не буквы и не цифры.
  • \s Соответствует пробелам. Эквивалентно [\t\n\r\f].
  • \S Не пробельные символы.
  • \d Соответствует цифрам. Эквивалентно [0-9].
  • \D Соответствует не цифрам.
  • \G Соответствует точки последнего совпадения.
  • \n Соответствует новой строке.
  • \b Совпадает на границе слова.
  • \B Совпадает не на границе слова.
  • \n, \t, etc. Символы новой строки, возврата каретки, вкладки и т.д.
  • \Q Цитата все символы до \ E.
  • \E Заканчивается цитирование начатое с \ Q.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION