Este enlace muestra un enfoque que parece funcionar -> [^] + Lo que significa 'no coincide con ningún carácter', un doble negativo que puede volver a leerse como 'coincidir con cualquier carácter'. Fuente - loune.net/2011/02/…
HockeyJ
Respuestas:
645
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 veces
Esa es una información muy útil! Supuse .que coincidiría con las nuevas líneas. Me alegra haber leído tu respuesta, ¡necesito usar eso!
Ben Kane
Es posible que a veces también necesite hacer coincidir nuevas líneas en expresiones regulares de Java en contextos donde no puede pasar Pattern.DOTALL, como cuando se realiza una búsqueda de expresiones regulares de varias líneas en Eclipse, o como usuario de cualquier aplicación Java que ofrezca búsqueda de expresiones regulares. Según la guía de regular-expression.info , es posible que deba usar {.,\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.
Theodore Murdock el
8
@TheodoreMurdock [\s\S]es una forma popular de emparejar cualquier personaje si no puedes usar DOTALL.
mpen
En caso de que se le ocurra , NO lo use (?:.|\\v)*, debido a JDK-6337993 .
Olivier Cailloux
22
Use el patrón .para que coincida con cualquier personaje una vez, .*para que coincida con cualquier personaje cero o más veces, .+para que coincida con cualquier personaje una o más veces.
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.
Vota a favor aquí. El OP no especificó, pero parece correcto agregar que el patrón coincidirá con cualquier carácter, incluidos elementos como ### 123, 123123,% $ # 123 que el OP puede no querer. La clase de caracteres que @Huusom usa arriba hará que todos los OP utilicen solo caracteres alfabéticos en mayúsculas, que pueden haber sido la intención.
techdude
9
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.
Como referencia, de regular-expressions.info/dot.html : "JavaScript y VBScript no tienen una opción para hacer que los puntos coincidan con los caracteres de salto de línea. En esos idiomas, puede usar una clase de caracteres como [\ s \ S] para que coincida con cualquier carácter. Este carácter coincide con un carácter que es un espacio en blanco (incluidos los caracteres de salto de línea) o un carácter que no es un carácter de espacio en blanco. Dado que todos los caracteres son espacios en blanco o no, esta clase de caracteres coincide con cualquier carácter ".
Dean o el
7
.*y .+son para cualquier carácter excepto para nuevas líneas.
Doble escape
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
Escapar individual:
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]+
Prueba
import java.util.regex.Matcher;import java.util.regex.Pattern;publicclassRegularExpression{publicstaticvoid main(String[] args){finalString regex_1 ="[\\s\\S]*";finalString regex_2 ="[\\d\\D]*";finalString regex_3 ="[\\w\\W]*";finalString string ="AAA123\n\t"+"ABCDEFGH123\n\t"+"XXXX123\n\t";finalPattern pattern_1 =Pattern.compile(regex_1);finalPattern pattern_2 =Pattern.compile(regex_2);finalPattern pattern_3 =Pattern.compile(regex_3);finalMatcher matcher_1 = pattern_1.matcher(string);finalMatcher matcher_2 = pattern_2.matcher(string);finalMatcher 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));}}}
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.
[^]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.
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");}
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 vecesfuente
Sí, 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:fuente
.
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.(?:.|\\v)*
, debido a JDK-6337993 .Use el patrón
.
para que coincida con cualquier personaje una vez,.*
para que coincida con cualquier personaje cero o más veces,.+
para que coincida con cualquier personaje una o más veces.fuente
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:
Ahora puede agregar fácilmente nuevos casos de prueba y probar nuevos patrones. Diviértete explorando expresiones regulares.
Ver también
fuente
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
fuente
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.fuente
Doble escape
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 ++:
por cero o más veces, o
por una o más veces
Escapar individual:
No se requiere doble escape para algunos lenguajes como C #, PHP, Ruby, PERL, Python, JavaScript:
Prueba
Salida
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.
Circuito RegEx
jex.im visualiza expresiones regulares:
fuente
(\W|\w)*
lugar de doble escapeSolució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 de123
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,}
.fuente
[^]
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:
fuente
Prueba la expresión regular
.{3,}
. Esto coincidirá con todos los caracteres excepto una nueva línea.fuente
Yo trabajo esto No siempre punto es significa cualquier char. Excepción cuando el modo de línea única.
\p{all}
debiera serfuente