Requisito previo: expresiones regulares en Java
Las coincidencias de límites pueden ayudarnos a encontrar en qué parte de la string se está produciendo la coincidencia. Puede hacer que sus coincidencias de patrones sean más precisas especificando dicha información con los emparejadores de límites. Por ejemplo, tal vez le interese encontrar una palabra en particular, pero solo si aparece al principio o al final de una línea. O tal vez quiera saber si la coincidencia se lleva a cabo en un límite de palabras o al final de la coincidencia anterior.
Lista de emparejadores de límites
- ^ – Colocado antes de la palabra para coincidir
- $– Colocado al final de una palabra para que coincida
- \b – Comprueba si un patrón comienza o termina en un límite de palabra
- \B : coincide con la expresión en un límite que no es una palabra
- \A – El comienzo de la entrada
- \G – Requiere que la coincidencia ocurra solo al final de la coincidencia anterior
- \Z : el final de la entrada pero para el terminador final, si lo hay
- \z — El final de la entrada
Caso 1: Emparejar la palabra con ^ y $
- ^ – coincide con el comienzo de una línea
- $ – coincide con el final.
-
Input : txt = "geeksforgeeks", regex = "^geeks" Output : Found from index 0 to 3 Explanation : Note that the result doesn't include "geeks" after "for" as we have used ^ in regex.
-
Input : txt = "geeksforgeeks", regex = "geeks$" Output : Found from index 8 to 13. Explanation : Note that the result doesn't include "geeks" before "for" as we have used $ in regex.
-
Input : txt = "geeksforgeeks", regex = "^geeks$" Output : No match found Explanation : The given regex would only matches with "geeks".
-
Input : txt = " geeksforgeeks", regex = "^geeks" Output: No match found. Explanation : The input string contains extra whitespace at the beginning.
-
// Extra \ is used to escape one \ Input : txt = " geeksforgeeks", regex : "^\\s+geeks" Output: Found from index 0 to 6. Explanation : The pattern specifies geeks after one or more spaces.
// Java program to demonstrate that ^ matches the beginning of // a line, and $ matches the end. import java.util.regex.Matcher; import java.util.regex.Pattern; class Reg { public static void main(String[] args) { String txt = "geeksforgeeks"; // Demonstrating ^ String regex1 = "^geeks"; Pattern pattern1 = Pattern.compile(regex1, Pattern.CASE_INSENSITIVE); Matcher matcher1 = pattern1.matcher(txt); while (matcher1.find()) { System.out.println("Start index: " + matcher1.start()); System.out.println("End index: " + matcher1.end()); } // Demonstrating $ String regex2 = "geeks$"; Pattern pattern2 = Pattern.compile(regex2, Pattern.CASE_INSENSITIVE); Matcher matcher2 = pattern2.matcher(txt); while (matcher2.find()) { System.out.println("\nStart index: " + matcher2.start()); System.out.println("End index: " + matcher2.end()); } } }
Producción:
Start index: 0 End index: 5 Start index: 8 End index: 13
Caso 2: verifica si un patrón comienza o termina en un límite de palabra usando \b
-
Input: txt = "geeksforgeeks geekspractice", pat = "\\bgeeks" Output: Found from index 0 to 5 and from index 14 to 19 Explanation : The pattern "geeks" is present at the beginning of two words "geeksforgeeks" and "geekspractice"
-
Input: txt = "geeksforgeeks geekspractice", pat = "geeks\\b" Output: Found from index 8 to 13 Explanation : The pattern "geeks" is present at the end of one word "geeksforgeeks"
// Java program to demonstrate use of \b to match // regex at beginning and end of word boundary import java.util.regex.Matcher; import java.util.regex.Pattern; class Reg { public static void main(String[] args) { String txt = "geeksforgeeks geekspractice"; // Demonstrating beginning of word boundary String regex1 = "\\bgeeks"; // Matched at two places Pattern pattern1 = Pattern.compile(regex1, Pattern.CASE_INSENSITIVE); Matcher matcher1 = pattern1.matcher(txt); while (matcher1.find()) { System.out.println("Start index: " + matcher1.start()); System.out.println("End index: " + matcher1.end()); } // Demonstrating end of word boundary String regex2 = "geeks\\b"; // Matched at one place Pattern pattern2 = Pattern.compile(regex2, Pattern.CASE_INSENSITIVE); Matcher matcher2 = pattern2.matcher(txt); while (matcher2.find()) { System.out.println("\nStart index: " + matcher2.start()); System.out.println("End index: " + matcher2.end()); } } }
Producción:
Start index: 0 End index: 5 Start index: 14 End index: 19 Start index: 8 End index: 13
Caso 3: haga coincidir la expresión en un límite que no sea de palabra, use \B en su lugar
-
Input: txt = "geeksforgeeks geekspractice", pat = "\\Bgeeks" Output: Found from index 8 to 13 Explanation : One occurrence of pattern "geeks" is not present at the beginning of word which is end of "geeksforgeeks"
-
Input: txt = "geeksforgeeks geekspractice", pat = "geeks\\B" Output: Found from index 0 to 5 and from index 14 to 19 Explanation : Two occurrences of "geeks" are not present at the end of word.
// Java program to demonstrate use of \B to match // regex at beginning and end of non word boundary import java.util.regex.Matcher; import java.util.regex.Pattern; class Reg { public static void main(String[] args) { String txt = "geeksforgeeks geekspractice"; // Demonstrating Not beginning of word String regex1 = "\\Bgeeks"; // Matches with two Pattern pattern1 = Pattern.compile(regex1, Pattern.CASE_INSENSITIVE); Matcher matcher1 = pattern1.matcher(txt); while (matcher1.find()) { System.out.println("Start index: " + matcher1.start()); System.out.println("End index: " + matcher1.end() + "\n"); } // Demonstrating Not end of word String regex2 = "geeks\\B"; // Matches with one Pattern pattern2 = Pattern.compile(regex2, Pattern.CASE_INSENSITIVE); Matcher matcher2 = pattern2.matcher(txt); while (matcher2.find()) { System.out.println("Start index: " + matcher2.start()); System.out.println("End index: " + matcher2.end()); } } }
Producción:
Start index: 8 End index: 13 Start index: 0 End index: 5 Start index: 14 End index: 19
Caso 4: Coincidencia para ocurrir solo al final de la coincidencia anterior, use \G:
-
Input: txt = "geeksgeeks geeks", pat = "\\Ggeeks" Output: Found from index 0 to 5 and from 5 to 10 Explanation : Only first two occurrences of "geeks" in text match. the occurrence after space doesn't match as it is not just after previous match.
// Java program to demonstrate use of \G to match // to occur only at the end of the previous match import java.util.regex.Matcher; import java.util.regex.Pattern; class Reg { public static void main(String[] args) { String txt = "geeksgeeks geeks"; // Demonstrating \G String regex1 = "\\Ggeeks"; // Matches with first two geeks Pattern pattern1 = Pattern.compile(regex1, Pattern.CASE_INSENSITIVE); Matcher matcher1 = pattern1.matcher(txt); while (matcher1.find()) { System.out.println("Start index: " + matcher1.start()); System.out.println("End index: " + matcher1.end()); } } }
Producción:
Start index: 0 End index: 5 Start index: 5 End index: 10
Referencias: https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html
Este artículo es una contribución de Nishant Sharma . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA