validate test regulares regular probar online expresiones expresion espacio ejemplos blanco alfanumerico regex

regex - test - Coincidencia de una subcadena opcional en una expresión regular



regex replace online (4)

Esto debería funcionar:

^/d+/s?(/([^/)]+/)/s?)?Z$

Sin embargo, aún no lo he probado, pero déjame darte el desglose, así que si quedan algunos errores, deberían ser bastante sencillos de encontrar:

Primero el comienzo:

^ = beginning of string /d+ = one or more decimal characters /s? = one optional whitespace

Entonces esta parte:

(/([^/)]+/)/s?)?

Es en realidad:

(.............)?

Lo que hace que los siguientes contenidos sean opcionales, solo si existen completamente

/([^/)]+/)/s? /( = an opening bracket [^/)]+ = a series of at least one character that is not a closing bracket /) = followed by a closing bracket /s? = followed by one optional whitespace

Y el final está hecho de

Z$

Dónde

Z = your constant string $ = the end of the string

Estoy desarrollando un algoritmo para analizar un número de una serie de cadenas cortas. Estas cadenas son algo regulares, pero hay algunas formas generales diferentes y varias excepciones. Estoy intentando crear un conjunto de expresiones regulares que manejarán las diversas formas y excepciones; Los aplicaré uno tras otro para ver si obtengo una coincidencia.

Una de estas formas es algo como esto:

X (Y) Z

Dónde:

  • X es un número que quiero capturar.
  • Z es estático, texto predefinido. es básicamente cómo determino si esta forma particular es aplicable o no.
  • Y es una cadena de longitud y contenido desconocidos, rodeada de paréntesis.

Además: Y es opcional; no siempre aparece en una cadena con Z y X. Entonces, quiero poder extraer los números de todas estas cadenas:

  • 10 Z
  • 20 (foo) Z
  • 30 (barra) Z

En este momento, tengo una expresión regular que capturará la primera:

([0-9]+) +Z

Mi problema es que no sé cómo construir una expresión regular que coincida con una serie de caracteres si y solo si están entre paréntesis. ¿Se puede hacer esto en una sola expresión regular?


Prueba esto:

X (/(Y/))? Z


Puedes hacerlo:

([0-9]+) (/([^)]+/))? Z

Sin embargo, esto no funcionará con paréntesis anidados para Y. El anidamiento requiere recursión que ya no es estrictamente regular (pero sin contexto). Los motores regexp modernos aún pueden manejarlo, aunque con algunas dificultades (referencias).


(/d+)/s+(/(.*?/))?/s?Z

Tenga en cuenta los paréntesis escapados, y el? (cero o una vez) cuantificadores. Cualquiera de los grupos que no desea capturar puede ser (?: Grupos sin captura).

Estoy de acuerdo sobre los espacios. / s es una mejor opción allí. También cambié el cuantificador para asegurar que haya dígitos al principio. En cuanto a las nuevas líneas, eso dependería del contexto: si el archivo se analiza línea por línea, no será un problema. Otra opción es anclar el inicio y el final de la línea (agregue un ^ al frente y un $ al final).