En Java, al hacer un replaceAll para buscar un patrón de expresiones regulares como:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1");
(para eliminar palabras duplicadas consecutivas que no distinguen entre mayúsculas y minúsculas, por ejemplo, prueba de prueba), no estoy seguro de dónde puse el ?i
. Leí que se supone que está al principio, pero si lo saco, capturo palabras consecutivas duplicadas (por ejemplo, prueba de prueba), pero no palabras que no distinguen entre mayúsculas y minúsculas (por ejemplo, prueba de prueba). Así que pensé que podría agregar el? I al principio, pero eso no parece hacer el trabajo. ¿Alguna idea? ¡Gracias!
java
regex
case-sensitive
Cristal
fuente
fuente
Respuestas:
RegexBuddy me dice que si desea incluirlo al principio, esta es la sintaxis correcta:
fuente
También puede hacer coincidir expresiones regulares que no distinguen entre mayúsculas y minúsculas y hacerlas más legibles utilizando la constante Pattern.CASE_INSENSITIVE como:
fuente
Pattern.compile(myregex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE)
(?i)
, las expresiones regulares de Java ya eran bastante ilegibles: SSí, la insensibilidad a mayúsculas y minúsculas se puede habilitar y deshabilitar a voluntad en Java regex.
Parece que quieres algo como esto:
Tenga en cuenta que la bandera incrustada no lo
Pattern.CASE_INSENSITIVE
es . Tenga en cuenta también que se ha eliminado uno superfluo del patrón.(?i)
\?i
\b
Se
(?i)
coloca al principio del patrón para permitir la insensibilidad a mayúsculas y minúsculas. En este caso particular, no se anula más adelante en el patrón, por lo que, en efecto, todo el patrón no distingue entre mayúsculas y minúsculas.Vale la pena señalar que, de hecho, puede limitar la insensibilidad a mayúsculas y minúsculas a solo partes del patrón completo. Por lo tanto, la cuestión de dónde colocarlo realmente depende de la especificación (aunque para este problema en particular no importa ya que no
\w
distingue entre mayúsculas y minúsculas.Para demostrarlo, aquí hay un ejemplo similar de colapsar series de letras como
"AaAaaA"
simplemente"A"
.Ahora suponga que especificamos que la ejecución solo debe colapsarse solo si comienza con una letra mayúscula. Luego debemos poner el
(?i)
en el lugar apropiado:De manera más general, puede habilitar y deshabilitar cualquier indicador dentro del patrón como desee.
Ver también
java.util.regex.Pattern
/regex/i
(Pattern.CASE_INSENSITIVE
en Java), puede hacer/(?i)regex/
/first(?i)second(?-i)third/
/first(?i:second)third/
\b
entre a\w
y a\s
)Preguntas relacionadas
fuente
Si toda su expresión no distingue entre mayúsculas y minúsculas, puede especificar la
CASE_INSENSITIVE
bandera:fuente
También puede llevar su cadena inicial, que va a verificar para la coincidencia de patrones, a minúsculas. Y use en su patrón símbolos en minúscula respectivamente.
fuente