Lo que necesito es verificar si una cadena dada coincide parcialmente con una expresión regular determinada. Por ejemplo, para la expresión regular ab[0-9]c
, las cadenas "a", "ab", "ab3" y "b3c" coincidirían, pero no las cadenas "d", "abc" o "a3c". Lo que he estado haciendo es el torpe a(?:b(?:[0-9](?:c)?)?)?
(que solo funciona para algunas de las coincidencias parciales, específicamente aquellas que "comienzan" a coincidir), pero dado que esto es parte de una API, prefiero darles a los usuarios una intuición más intuitiva. forma de ingresar sus expresiones regulares coincidentes.¿Existe una forma elegante de hacer coincidencias parciales de expresiones regulares en Java?
En caso de que la descripción no sea muy clara (y me doy cuenta de que podría no ser así), se usará para validar el ingreso de texto en cuadros de texto. Quiero evitar cualquier edición que daría como resultado una cadena no válida, pero no puedo hacer coincidir la cadena con una expresión regular, ya que hasta que no se ingrese por completo, no coincidirá. Por ejemplo, usando la expresión regular anterior (ab[0-9]c
), cuando intento ingresar 'a', no se permite, ya que la cadena "a" no coincide con la expresión regular.
Básicamente, es una especie de startsWith()
inversa que funciona en expresiones regulares. (new Pattern("ab[0-9]c").startsWith("ab3")
debe devolver true
.)
¿Alguna idea?
FYI: 'un (?: B (?:?? [0-9] (?: c)))?' Coincidirá * cualquier cadena * que contiene un "a", tal como "jazz ". Desea utilizar '^ a (?: B (?: [0-9] (?: c)?)?)? $' Para que coincida con toda la cadena. – Kip
¿Son todas las expresiones regulares que el cliente usa tan simples como 'ab [0-9] c', o necesitará una coincidencia más compleja (es decir, con subgrupos)? – Kip
Oops ... sí, los^y $ se agregan automáticamente a la expresión regular, por lo que no los agregué, gracias. Y no, las expresiones regulares no son tan simples, pueden volverse bastante complejas, aunque no tan lejos como para requerir subgrupos. – Tonio