¿Qué significan `? I` y`? -I` en regex.

¿Podría alguien explicar qué significa (?i) y (?-i) envolver una palabra en regex?

 (?i)test(?-i) 

teSt y coincide con la test , la TEST y el teSt . Pero nunca he visto esto antes. ¿Qué hace el ? antes de lo que quiero decir? Vi esto aquí .

(?i) inicia el modo insensible a mayúsculas y minúsculas

(?-i) desactiva el modo insensible a mayúsculas y minúsculas

Más información en la sección “Activación y desactivación de los modos para solo una parte de la expresión regular” de esta página :

Los sabores regex modernos le permiten aplicar modificadores solo a una parte de la expresión regular. Si inserta el modificador (? Ismo) en el medio de la expresión regular, el modificador solo se aplica a la parte de la expresión regular a la derecha del modificador. Puede desactivar los modos precediéndolos con un signo menos. Todos los modos después del signo menos se apagarán. Por ejemplo, (? I-sm) activa la insensibilidad de mayúsculas y desactiva tanto el modo de línea única como el modo multilíneas.

No todos los sabores regex apoyan esto. JavaScript y Python aplican todos los modificadores de modo a la expresión regular completa. No admiten la syntax (? -Ismx), ya que desactivar una opción no tiene sentido cuando los modificadores de modo se aplican a todas las expresiones regulares. Todas las opciones están desactivadas por defecto.

Puedes probar rápidamente cómo el sabor regex que estás usando maneja los modificadores de modo. La expresión regular (? I) te (? – i) st debe coincidir con la prueba y el TEst, pero no con la prueba o prueba.

(?i) activa el modo insensible a mayúsculas y minúsculas , (?-i) lo desactiva.

Por ejemplo, si intentaste (?i)te(?-i)st , coincidiría con la prueba , TEst , tEst , pero no teST .

Tomado directamente de ruby ​​docs.

El delimitador final para una expresión regular puede ir seguido de una o más opciones de letra única que controlan cómo el patrón puede coincidir.

/ pat / i – Ignorar el caso

/ pat / m: trata una nueva línea como un personaje con el que coincide.

/ pat / x – Ignora el espacio en blanco y los comentarios en el patrón

/ pat / o -> Realiza la interpolación # {} solo una vez

i, m y x también se pueden aplicar en el nivel de subexpresión con el constructo (? on-off), que activa las opciones y deshabilita las opciones de la expresión entre paréntesis.