Lo siguiente debe coincidir:
AAA123
ABCDEFGH123
XXXX123
puedo hacer: ".*123"
?
Lo siguiente debe coincidir:
AAA123
ABCDEFGH123
XXXX123
puedo hacer: ".*123"
?
Respuestas:
Sí tu puedes. Eso debería funcionar.
.
= cualquier char\.
= el carácter de punto real.?
= .{0,1}
= coincide con cualquier carácter cero o una vez.*
= .{0,}
= coincide con cualquier carácter cero o más veces.+
= .{1,}
= coincide con cualquier personaje una o más vecesSí, eso funcionará, aunque tenga en cuenta que .
no coincidirá con las nuevas líneas a menos que pase el indicador DOTALL al compilar la expresión:
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
que coincidiría con las nuevas líneas. Me alegra haber leído tu respuesta, ¡necesito usar eso!
{.,\n,\r,\u2028,\u2029,\u0085}
para que coincida absolutamente con cualquier carácter (los caracteres Unicode son caracteres adicionales de terminación de línea agregados que no coinciden .
en Java), pero solo {.,\n,\r}
funcionarían para la mayoría de los archivos de texto.
[\s\S]
es una forma popular de emparejar cualquier personaje si no puedes usar DOTALL.
Hay muchas herramientas sofisticadas de prueba y desarrollo de expresiones regulares, pero si solo quieres un arnés de prueba simple en Java, aquí tienes uno para que juegues:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
Ahora puede agregar fácilmente nuevos casos de prueba y probar nuevos patrones. Diviértete explorando expresiones regulares.
No, *
coincidirá con cero o más caracteres. Debe usar +
, que coincide con uno o más en su lugar.
Esta expresión podría funcionar mejor para usted: [A-Z]+123
La forma más común que he visto para codificar esto es con una clase de caracteres cuyos miembros forman una partición del conjunto de todos los caracteres posibles.
Por lo general, la gente escribe que a medida [\s\S]
(espacio en blanco o no está en blanco), sin embargo [\w\W]
, [\d\D]
, etc haría todo el trabajo.
.*
y.+
son para cualquier carácter excepto para nuevas líneas.
En caso de que desee incluir nuevas líneas, las siguientes expresiones también podrían funcionar para aquellos lenguajes que requieren doble escape, como Java o C ++:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
por cero o más veces, o
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
por una o más veces
No se requiere doble escape para algunos lenguajes como C #, PHP, Ruby, PERL, Python, JavaScript:
[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex_1 = "[\\s\\S]*";
final String regex_2 = "[\\d\\D]*";
final String regex_3 = "[\\w\\W]*";
final String string = "AAA123\n\t"
+ "ABCDEFGH123\n\t"
+ "XXXX123\n\t";
final Pattern pattern_1 = Pattern.compile(regex_1);
final Pattern pattern_2 = Pattern.compile(regex_2);
final Pattern pattern_3 = Pattern.compile(regex_3);
final Matcher matcher_1 = pattern_1.matcher(string);
final Matcher matcher_2 = pattern_2.matcher(string);
final Matcher matcher_3 = pattern_3.matcher(string);
if (matcher_1.find()) {
System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
}
if (matcher_2.find()) {
System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
}
if (matcher_3.find()) {
System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
}
}
}
Full Match for Expression 1: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 2: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 3: AAA123
ABCDEFGH123
XXXX123
Si desea explorar la expresión, se explica en el panel superior derecho de regex101.com . Si lo desea, también puede ver en este enlace cómo coincidiría con algunas entradas de muestra.
jex.im visualiza expresiones regulares:
(\W|\w)*
lugar de doble escape
Solución específica al problema de ejemplo: -
Trate [A-Z]*123$
coincidirá 123
, AAA123
, ASDFRRF123
. En caso de que necesite al menos un personaje antes de 123
usarlo [A-Z]+123$
.
Solución general a la pregunta (Cómo hacer coincidir "cualquier carácter" en la expresión regular):
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.[^]
debe coincidir con cualquier carácter, incluida la nueva línea. [^
CHARS]
coincide con todos los caracteres excepto los de CHARS . Si CHARS está vacío, coincide con todos los caracteres.
Ejemplo de JavaScript:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
Prueba la expresión regular .{3,}
. Esto coincidirá con todos los caracteres excepto una nueva línea.
Yo trabajo esto No siempre punto es significa cualquier char. Excepción cuando el modo de línea única. \p{all}
debiera ser
String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
if(value.matches(expression)){
System.out.println("true");
} else {
System.out.println("false");
}