Esta es una página de referencia, no crea que tiene que leerla, ya que es bastante escueta. Otras secciones enlazan con ella cuando es necesario.
Los modificadores Regex aparecen en cada esquina de este sitio. En lugar de explicar repetidamente lo que hacen y las múltiples formas de activarlos en cada sabor de regex, he decidido reunir los cuatro más comunes (i, s, m y x) en un solo lugar. La sección final examina brevemente otros modificadores, que suelen ser específicos del idioma.
Puntos de salto
Para facilitar la navegación, aquí hay algunos puntos de salto a varias secciones de la página:
✽ Insensibilidad a las mayúsculas y minúsculas: i
✽ DOTALL (el punto coincide con los saltos de línea): s (excepto Ruby y JavaScript)
✽ Multilínea (^ y $ coinciden en cada línea): m (excepto Ruby)
✽ Espacio libre: x (excepto JavaScript)
✽ Otros modificadores
✽ Modificadores especiales de inicio de patrón de PCRE
(enlace directo)

Insensibilidad de mayúsculas y minúsculas: i

Por defecto, todos los principales motores regex coinciden en modo sensible a las mayúsculas. Si desea que patrones como Nombre: + coincidan en modo de insensibilidad a las mayúsculas y minúsculas, necesitamos activar esa característica.
Sí, pero…
¿Qué significa realmente la insensibilidad a las mayúsculas y minúsculas?
Mientras se ciña a las 26 letras del alfabeto inglés, la definición de mayúsculas y minúsculas es sencilla. Sin embargo, cuando se trata de sutilezas tipográficas o de otros idiomas y alfabetos, las cosas no siempre son tan sencillas. Estas son algunas de las preguntas con las que se puede encontrar.
✽ ¿La fl (un carácter, es decir, la ligadura fl) coincidirá con FL?
✽ ¿La à (un carácter) coincidirá con À?
✽ ¿La à (dos caracteres, es decir, la letra a y el acento grave) coincidirá con À? Todos los motores parecen manejarlo correctamente.
✽ ¿Coincidirá ß con ss? Ningún motor parece hacerlo.
✽ ¿Coincidirá la i con la İ (i mayúscula turca) al igual que la I?
Estas preguntas son sólo la punta del iceberg. Incluso si supiera todas las respuestas, sería imposible incluirlas todas en esta sección: si utiliza un script en particular, tendrá que investigar cómo su motor específico maneja la coincidencia de mayúsculas y minúsculas en ese script.
Más de una manera
Para varios motores, tenga en cuenta que hay dos maneras de activar la coincidencia de mayúsculas y minúsculas: como un modificador en línea (?i) o como una opción en el método o función regex.
Modificador en línea (?i)
En .NET, PCRE (C, PHP, R…), Perl, Python, Java y Ruby (pero no en JavaScript), puede utilizar el modificador en línea (?i), por ejemplo en (?i)cat. Consulte la sección sobre modificadores en línea para obtener jugosos detalles sobre tres características adicionales (no disponibles en Python): activarlo en mitad de la cadena, desactivarlo con (?-i) o aplicarlo sólo al contenido de un grupo que no sea de captura con (?i:foo)

.NET
Además del modificador en línea (?i), los lenguajes .NET tienen la opción IgnoreCase. Por ejemplo, en C# puede utilizar:
var catRegex = new Regex("cat", RegexOptions.IgnoreCase);
Perl
Además del modificador en línea (?i), Perl le permite añadir la bandera i después del delimitador de cierre de su patrón. Por ejemplo, puede utilizar:
if ($the_subject =~ m/cat/i) { … }
PCRE (C, PHP, R…)
Tenga en cuenta que en PCRE, para utilizar la coincidencia sin distinción de mayúsculas y minúsculas con letras no inglesas que no forman parte de su configuración regional, tendrá que activar el modo Unicode, por ejemplo con el modificador especial de inicio de patrón (*UTF8).
Aparte del modificador inline (?i) en línea, PCRE le permite establecer el modo PCRE_CASELESS cuando llama a la función pcre_compile() (o similar):

cat_regex = pcre_compile( "cat", PCRE_CASELESS, &error, &erroroffset, NULL ); 

En PHP, la opción PCRE_CASELESS se pasa a través de la bandera i, que puede añadir en su cadena regex después del delimitador de cierre. Por ejemplo, puede utilizar:
$cat_regex = '~cat~i';
En R, la opción PCRE_CASELESS se pasa a través de la opción ignore.case=TRUE. Por ejemplo, puede utilizar:
grep("cat", subject, perl=TRUE, value=TRUE, ignore.case=TRUE);
Python
Además del modificador inline (?i), Python tiene la opción IGNORECASE. Por ejemplo, puede utilizar:
cat_regex = re.compile("cat", re.IGNORECASE)
Java
Además del modificador en línea (?i), Java tiene la opción CASE_INSENSITIVE. Por ejemplo, puede utilizar:

Pattern catRegex = Pattern.compile( "cat", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE );

La opción UNICODE_CASE añadida aquí asegura que la función de insensibilidad a las mayúsculas y minúsculas es compatible con Unicode. Si sólo trabaja con ASCII, no es necesario utilizarla.
JavaScript
En JavaScript, su única opción es añadir la bandera i después del delimitador de cierre de su patrón. Por ejemplo, puede utilizar:
var catRegex = /cat/i;
Ruby
Además del modificador en línea (?i), Ruby te permite añadir la bandera i después del delimitador de cierre de tu patrón. Por ejemplo, puedes usar
cat_regex = /cat/i
(enlace directo)

DOTALL (El punto coincide con los saltos de línea): s (con excepciones)

Por defecto, el punto . no coincide con los caracteres de salto de línea como los saltos de línea y los retornos de carro. Si desea que patrones como BEGIN .*? END coincidan a través de las líneas, necesitamos activar esa característica.
Este modo se llama a veces de línea única (de ahí la s) porque en lo que respecta al punto, convierte toda la cadena en una gran línea-.* coincidirá desde el primer carácter hasta el último, sin importar cuántos saltos de línea haya entre ellos.

El modo también se llama DOTALL en PCRE, Python y Java (para ser más precisos, la documentación de PCRE utiliza PCRE_DOTALL). Para mí, el nombre DOTALL es una forma sensata de llamar a este modo. La tercera opción dot-matches-line-breaks es descriptiva, pero un poco engorrosa.
Para varios motores, tenga en cuenta que hay dos maneras de activarlo: como un modificador en línea o como una opción en el método o función regex.
JavaScript
JavaScript no soporta el modo de línea única. Para hacer coincidir cualquier carácter en JavaScript, incluidos los saltos de línea, utilice una construcción como . Esta clase de caracteres coincide con un carácter que sea un no-dígito \D o un dígito \d. Por lo tanto, coincide con cualquier carácter.
Otra solución de JavaScript es utilizar la biblioteca regex XRegExp. Si tienes tiempo infinito, también puedes intentar portar PCRE a JavaScript usando Emscripten, como parece que ha hecho Firas en regex 101.
Modificador en línea (?s)
En .NET, PCRE (C, PHP, R…), Perl, Python y Java (pero no Ruby), puedes usar el modificador en línea (?s), por ejemplo en (?s)BEGIN .*? END. Vea la sección sobre modificadores inline para obtener jugosos detalles sobre tres características adicionales (no disponibles en Python): activarlo en mitad de la cadena, desactivarlo con (?-s), o aplicarlo sólo al contenido de un grupo no capturado con (?s:foo)
.NET
Además del modificador inline (?s), los lenguajes .NET tienen la opción Singleline. Por ejemplo, en C# puede utilizar:

var blockRegex = new Regex( "BEGIN .*? END", RegexOptions.IgnoreCase | RegexOptions.Singleline );

Perl
Además del modificador inline (?s), Perl le permite añadir la bandera s después del delimitador de cierre de su patrón. Por ejemplo, puede utilizar:
if ($the_subject =~ m/BEGIN .*? END/s) { … }
PCRE (C, PHP, R…)
Aparte del modificador inline (?s), PCRE le permite establecer el modo PCRE_DOTALL cuando llama a la función pcre_compile() (o similar):

block_regex = pcre_compile( "BEGIN .*? END", PCRE_DOTALL, &error, &erroroffset, NULL ); 

En PHP, la opción PCRE_DOTALL se pasa a través de la bandera s, que puede añadir en su cadena regex después del delimitador de cierre. Por ejemplo, puede utilizar:
$block_regex = '~BEGIN .*? END~s';
Python
Además del modificador en línea (?s), Python tiene la opción DOTALL. Por ejemplo, puede utilizar:
block_regex = re.compile("BEGIN .*? END", re.IGNORECASE | re.DOTALL)
Java
Además del modificador inline (?s), Java tiene la opción DOTALL. Por ejemplo, puede utilizar:

Pattern blockRegex = Pattern.compile( "BEGIN .*? END", Pattern.CASE_INSENSITIVE | Pattern.DOTALL ); 

Ruby: Modificador (?m) y bandera m
En Ruby, puedes utilizar el modificador inline (?m), por ejemplo en (?m)BEGIN .*? END. Esta es una peculiaridad de Ruby, ya que otros motores utilizan (?m) para el modo «^ y $ coinciden en cada línea».
Vea la sección sobre modificadores en línea para obtener jugosos detalles sobre tres características adicionales: activarlo en mitad de la cadena, desactivarlo con (?-m), o aplicarlo sólo al contenido de un grupo no capturado con (?m:foo)
Ruby también le permite añadir la bandera m al final de su cadena regex. Por ejemplo, puede utilizar:
block_regex = /BEGIN .*? END/m
(enlace directo)
Orígenes de DOTALL
El modo de una sola línea también se suele llamar DOTALL (que significa «dot matches all») debido a la opción PCRE_DOTALL en PCRE, la opción re.DOTALL en Python y la opción Pattern.DOTALL en Java.
He oído decir varias veces que «DOTALL es una cosa de Python» pero esto parecía venir de gente que no había oído hablar de las opciones equivalentes en PCRE y Java. Sin embargo, esto me hizo preguntarme: ¿dónde apareció DOTALL por primera vez? Mirando el registro de cambios de PCRE y la documentación antigua de Python, parece que apareció en PCRE con la versión 0.96 (octubre de 1997), en Python con la versión 1.5 (febrero de 1998), y luego en Java 1.4 (febrero de 2002). El desfase entre las introducciones de PCRE y Python no era concluyente -la palabra podría haber estado en circulación en versiones beta anteriores, o incluso en otras herramientas-, así que pregunté a Philip Hazel (el padre de PCRE) al respecto. Me contestó:

Creo que la inventé yo – ciertamente no la había visto en ningún otro sitio cuando intentaba pensar en un nombre para la opción de PCRE que se correspondiera con la opción /s de Perl. («S» allí significa «single-line» (…) así que quería un nombre mejor.)

Así que ahí está. Aquellos que gustan de un poco de historia podrían disfrutar de esta sabrosa pepita.
(enlace directo)

Multilínea (^ y $ coinciden en cada línea): m (excepto Ruby)

Por defecto, en todos los motores principales excepto Ruby, las anclas ^ y $ sólo coinciden (respectivamente) al principio y al final de la cadena.
En Ruby, coinciden al principio y al final de cada línea, y no hay manera de desactivar esa característica. Esta es en realidad una forma razonable de hacer las cosas, con la que Ruby se redime parcialmente por usar m para el modo DOTALL cuando otros motores usan s.
En otros motores, si quieres que patrones como ^Define y >>>$ coincidan (respectivamente) al principio y al final de cada línea, tenemos que activar esa característica.

Esta característica suele llamarse multilínea (de ahí la m) porque las anclas ^ y $ operan en varias líneas.
Para varios motores, tenga en cuenta que hay dos formas de activarla: como un modificador en línea (?m) o como una opción en el método o función regex.
Ruby
En Ruby, las anclas ^ y $ siempre coinciden en todas las líneas. No hay forma de desactivar esta opción. Esta es en realidad una forma bastante agradable de hacer las cosas, ya que, como en la mayoría de los sabores, hay anclas separadas para el comienzo y el final de las cadenas: \A, \Z y \z.
Por otro lado, uno puede lamentar la elección de Ruby de usar la bandera m y el modificador de una manera no estándar (ver DOTALL).
Modificador en línea (?m)
En .NET, PCRE (C, PHP, R…), Perl, Python, Java y Ruby (pero no JavaScript), puede usar el modificador en línea (?m), por ejemplo en (?m)^cat. Vea la sección sobre modificadores en línea para obtener jugosos detalles sobre tres características adicionales (no disponibles en Python): activarlo en mitad de la cadena, desactivarlo con (?-m), o aplicarlo sólo al contenido de un grupo no capturado con (?m:foo)
.NET
Además del modificador en línea (?m), los lenguajes .NET tienen la opción Multiline. Por ejemplo, en C# puedes usar:

var catRegex = new Regex("^cat", RegexOptions.IgnoreCase | RegexOptions.Multiline); 

Perl
Además del modificador en línea (?m), Perl te permite añadir la bandera m después del delimitador de cierre de tu patrón. Por ejemplo, puede utilizar:
if ($the_subject =~ m/^cat/m) { … }
PCRE (C, PHP, R…)
Aparte del modificador en línea (?m), PCRE le permite establecer el modo PCRE_MULTILINE cuando llama a la función pcre_compile() (o similar):

cat_regex = pcre_compile( "^cat", PCRE_CASELESS | PCRE_MULTILINE, &error, &erroroffset, NULL ); 

En PHP, la opción PCRE_MULTILINE se pasa a través de la bandera m, que puede añadir en su cadena regex después del delimitador de cierre. Por ejemplo, puede utilizar:
$cat_regex = '~^cat~m';
Python
Además del modificador en línea (?m), Python tiene la opción MULTILINE. Por ejemplo, puede utilizar:
cat_regex = re.compile("^cat", re.IGNORECASE | re.MULTILINE)
Java
Además del modificador inline (?m), Java tiene la opción MULTILINE. Por ejemplo, puede utilizar:

Pattern catRegex = Pattern.compile( "^cat", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE ); 

JavaScript
En JavaScript, su única opción es añadir la bandera m después del delimitador de cierre de su patrón. Por ejemplo, puede utilizar:
var catRegex = /^cat/m;
(enlace directo)

Espacio libre: x (excepto JavaScript)

Por defecto, cualquier espacio en una cadena regex especifica un carácter que debe coincidir. En los lenguajes en los que se pueden escribir cadenas regex en varias líneas, los saltos de línea también especifican los caracteres literales que deben coincidir. Como no se pueden insertar espacios para separar grupos con significados diferentes (como se hace entre frases y pragrafos cuando se escribe en inglés), una regex puede resultar difícil de leer, como por ejemplo la regex Meaning of Life de la página de humor de regex:
^(?=(?!(.))()(?-1)(?<!\d(?<=(?!)\d))).$
Por suerte, muchos motores admiten un modo de espaciado libre que permite airear la regex. Por ejemplo, puede añadir espacios entre los tokens. En PHP, podría escribir esto -nótese la bandera x después del delimitador final ~:
$word_with_digit_and_cap_regex = '~ ^ (?=\D*\d) \w*\w* $ ~x';
¿Pero por qué quedarse en una línea? Puede repartir su regex en tantas líneas como quiera -indentando y añadiendo comentarios- que se introducen con un #. Por ejemplo, en C# puede hacer algo como esto:

var wordWithDigitAndCapRegex = new Regex(@"(?x) # Free-spacing mode ^ # Assert that position = beginning of string ######### Lookahead ########## (?= # Start lookahead \D* # Match any non-digits \d # Match one digit ) # End lookahead ######## Matching Section ######## \w* # Match any word chars # Match one upper-case letter \w* # Match any word chars $ # Assert that position = end of string");

Este modo se llama modo de espaciado libre. También puede verlo llamado modo de espacio en blanco, modo de comentario o modo verboso.
Puede ser exagerado en una simple regex como la de arriba (aunque cualquiera que tenga que mantener su código se lo agradecerá). Pero si está construyendo un patrón regex serio como el del truco para que coincida con números en inglés simple… A menos que sea un masoquista, no tiene otra opción.
Note que dentro de una clase de caracteres, el carácter de espacio y el # (que de otra manera introduce comentarios) todavía son honrados-excepto en Java, donde ambos necesitan ser escapados si usted quiere coincidir con estos caracteres.
Para varios motores, hay dos maneras de activar el modo de espaciado libre: como un modificador en línea o como una opción en el método o función regex.
El modo de espaciado libre es maravilloso, pero hay un par de peligros menores que debe tener en cuenta, ya que pueden dejarle rascándose la cabeza preguntándose por qué un patrón no funciona como esperaba.

Peligro de tropiezo nº 1: El significado del espacio
En primer lugar, ya no se puede utilizar Number: \d+ para que coincida con una cadena como Número: 24. La razón es que el espacio en : \d ya no coincide con un espacio. Estamos en modo de espacio libre, ¿recuerdas? De eso se trata.
Para que coincida con un carácter de espacio, hay que especificarlo. Las dos formas principales de hacerlo son colocarlo dentro de una clase de caracteres, o escaparlo con una barra invertida. Cualquiera de las dos formas funciona: Número:\d+ o Número:\d+
Por supuesto, Número:\s\d+ también coincidiría, pero recuerde que \s coincide con mucho más que un carácter de espacio. Por ejemplo, podría coincidir con un tabulador o un salto de línea. Esto puede no ser lo que usted quiere.
Peligro de tropiezo nº 2: Inicio tardío
En segundo lugar, puede confiar demasiado en el poder del espaciado libre e intentar algo como esto para dejar que la regex se mantenga por sí misma:

var wordWithDigitAndCapRegex = new Regex(@" (?x) # Free-spacing mode ^ # Beginning of string etc # Match the literal chars e,t,c");

El problema con esto es que aunque puede parecer que el modificador de espaciado libre (?x) es lo primero en su regex, no lo es.
Después de la comilla doble de apertura «, tenemos un salto de línea y un número de espacios. El motor trata de hacerlos coincidir, porque en ese momento aún no estamos en modo de espacio libre. Ese modo se activa sólo cuando encontramos (?x). Este regex nunca coincidirá con la cadena etc y más, porque para el momento en que encontramos el comienzo del ancla de la cadena ^, se supone que ya hemos coincidido con un salto de línea y caracteres de espacio!
Esto es por lo que si usted mira el primer ejemplo, verá que el modificador de espacio libre (?x) es la primera cosa después del carácter de comillas de apertura.
Los espacios en blanco no sólo se recortan del patrón
Aunque los espacios en blanco se ignoran, la posición de un espacio en blanco sigue separando el token anterior del siguiente. Por ejemplo,
✽ (A)\1 2 no es lo mismo que (A)\12. El primero coincide con AA2, el segundo coincide con A\n en .NET, PCRE, Perl y Ruby (12 es el código octal para el carácter de salto de línea)
✽ \p{Nd} es válido, pero \p{N d} no lo es-excepto en Perl y Ruby
JavaScript
JavaScript no soporta el modo de espacio libre. En JavaScript, para coincidir con cualquier carácter, incluidos los saltos de línea, utilice una construcción como . Esta clase de caracteres coincide con un carácter que sea un no-dígito \D o un dígito \d. Por lo tanto, coincide con cualquier carácter.

Otra solución de JavaScript es utilizar la biblioteca regex XRegExp. Si usted tiene tiempo infinito en sus manos, también puede tratar de portar PCRE a JavaScript utilizando Emscripten, como Firas parece haber hecho en regex 101.
Modificador en línea (?s)
En .NET, PCRE (C, PHP, R…), Perl, Python, Java y Ruby (pero no JavaScript), puede utilizar el modificador en línea (?x), por ejemplo, se trata de una regex aireada para coincidir con palabras repetidas:
(?x) (\w+) + \bTambién vea la sección sobre modificadores en línea.
.NET
Aparte del modificador en línea (?x), los lenguajes .NET tienen la opción IgnorePatternWhitespace. Por ejemplo, en C# puede utilizar:

var repeatedWordRegex = new Regex(@" (\w+) + \b", RegexOptions.IgnorePatternWhitespace );

Perl
Además del modificador en línea (?x), Perl le permite añadir la bandera x después del delimitador de cierre de su patrón. Por ejemplo, puede utilizar:
if ($the_subject =~ m/(\w+) + \b/x) { … }
PCRE (C, PHP, R…)
Aparte del modificador inline (?x), PCRE le permite establecer el modo PCRE_EXTENDED al llamar a la función pcre_compile() (o similar):

repeated_word_regex = pcre_compile( "(\w+) + \b", PCRE_EXTENDED, &error, &erroroffset, NULL ); 

En PHP, la opción PCRE_EXTENDED se pasa a través de la bandera x, que puede añadir en su cadena regex después del delimitador de cierre. Por ejemplo, puede utilizar:
$repeated_word_regex = '~(\w+) + \b~x';
Python
Además del modificador en línea (?x), Python tiene la opción VERBOSE. Por ejemplo, puedes usar:
repeated_word_regex = re.compile(r"(\w+) + \b", re.VERBOSE)
Java
A diferencia de otros motores, dentro de una clase de caracteres Java se ignoran los hashes que introducen comentarios y espacios, por lo que debes escaparlos si quieres usar estos caracteres en una clase, por ejemplo +
Aparte del modificador inline (?x), Java tiene la opción COMMENTS. Por ejemplo, puedes usar:

Pattern repeatedWordRegex = Pattern.compile( "(\w+) + \1\b", Pattern.COMMENTS );

Ruby
Además del modificador en línea (?x), Ruby te permite añadir la bandera x al final de tu cadena regex. Por ejemplo, puedes usar
repeated_word_regex = /(\w+) + \b/x
(enlace directo)

Otros modificadores

Algunos motores soportan modificadores y banderas además de i, s, m y x. Planeo cubrirlos en las páginas dedicadas a esos sabores.
Por ejemplo,
✽ .NET tiene el modificador (?n) (también accesible mediante la opción ExplicitCapture). Esto convierte todos los (paréntesis) en grupos de no captura. Para capturar, debe usar grupos con nombre.
✽ Java tiene el modificador (?d) (también accesible a través de la opción UNIX_LINES). Cuando está activado, el carácter de salto de línea \N es el único que afecta al punto . (que no coincide con los saltos de línea a menos que DOTALL esté activado) y los anclajes ^ y $ (que coinciden con los comienzos y finales de línea en modo multilínea.)

✽ Perl tiene varios otros indicadores. Vea la sección de modificadores de la documentación.
✽ PCRE tiene el modificador (?J) (también disponible en código a través de la opción PCRE_DUPNAMES). Cuando se establece, se permite que diferentes grupos de captura utilicen el mismo nombre, aunque se les asignarán números diferentes.
(enlace directo)
✽ PCRE tiene el modificador (?U) (también disponible en el código a través de la opción PCRE_UNGREEDY). Cuando se establece, los cuantificadores no son codiciosos por defecto. Si se añade una ? se convierten en codiciosos.
(enlace directo)
✽ PCRE tiene el modificador (?X) (también disponible en el código mediante la opción PCRE_EXTRA). Históricamente, este modo se ha utilizado para habilitar nuevas características en el desarrollo. Por el momento, desencadena errores si se utilizan tokens como \B en una clase de caracteres (donde normalmente coincide con la letra B mayúscula, a diferencia de lo que ocurre fuera de una clase de caracteres, donde se trata de una aserción de no-límite-palabra).
✽ PCRE tiene una serie de modificadores especiales que pueden establecerse al inicio del patrón (se muestran a continuación). Además, muchas opciones pueden ser enviadas a la familia de funciones pcre_compile(), si tiene acceso a ellas. Para más detalles, obtenga pcre_compile.html de la carpeta doc descargando PCRE.
(enlace directo)

Modificadores especiales de inicio de patrón de PCRE

PCRE tiene un número de «modificadores especiales» que puede establecer al inicio de un patrón. En lugar de la sintaxis estándar (?z) para los modificadores en línea, la sintaxis de los modificadores especiales se parece a (*MYMODIFIER). Estos modificadores son particularmente útiles en contextos en los que PCRE está integrado dentro de una herramienta o un lenguaje, ya que sustituyen una serie de opciones que enviarías a pcre_compile().
Cadenas UTF
Asumiendo que PCRE está compilado con las opciones relevantes, puede instruir al motor para que trate la cadena de asunto como varios tipos de cadenas UTF.
✽ (*UTF) es una forma genérica de tratar el asunto como una cadena UTF-detectando si debe ser tratada como UTF-8, UTF-16 o UTF-32.
✽ (*UTF8), (*UTF16) y (*UTF32) tratan la cadena como una de las tres codificaciones UTF específicas.
Propiedades Unicode para \d y \w
Por defecto, \d sólo coincide con dígitos ASCII, mientras que \w sólo coincide con dígitos ASCII, letras y guiones bajos.
El modificador (*UCP) (que significa Propiedades de Caracteres Unicode) permite que estos tokens coincidan con dígitos y caracteres de palabras Unicode.

Por ejemplo, (*UCP)\d+ :: \w+ coincide con 1۳۲١८৮੪ :: Aれま래도ᚠᚱᚩ
(Ver demo).
En combinación con (*UCP), es posible que también tenga que utilizar uno de los modificadores (*UTF). Para ver cómo funciona esto, considere la salida de este programa con un Xampp PHP estándar:

$string = '1۳۲١८৮੪ :: Aれま래도ᚠᚱᚩ';$utfregex = "~\d+ :: \w+~";$utfregex = "~(*UCP)\d+ :: \w+~";$utfregex = "~(*UTF)(*UCP)\d+ :: \w+~";$utfregex = "~(*UTF)\d+ :: \w+~";$utfregex = "~\d+ :: \w+~u";foreach (range(0, 4) as $i) { echo "$i: ".preg_match($utfregex,$string)."<br />"; }// Output:// 0: 0// 1: 0// 2: 1 => (*UTF)(*UCP)// 3: 0// 4: 1 => The u flag produces the same result as (*UTF)(*UCP)

Modificadores de salto de línea
Por defecto, cuando se compila PCRE, se le dice qué debe considerar como un salto de línea cuando se encuentra un . (ya que el punto no coincide con los saltos de línea a menos que esté en modo dotall), así como el comportamiento de las anclas ^ y $ en modo multilínea. Puede anular este valor por defecto con los siguientes modificadores:
✽ (*CR) Sólo un retorno de carro se considera un salto de línea
✽ (*LF) Sólo un salto de línea se considera un salto de línea (como en Unix)
✽ (*CRLF) Sólo un retorno de carro seguido de un salto de línea se se considera un salto de línea (como en Windows)
✽ (*ANYCRLF) Cualquiera de los tres anteriores se considera un salto de línea
✽ (*ANY) Cualquier secuencia de nueva línea Unicode se considera un salto de línea
Por ejemplo, (*CR)\w+.\w+ coincide con Línea1\nLínea2 porque el punto puede coincidir con la \n, que no se considera un salto de línea. Vea la demostración.
Controlando \Nla R
Por defecto, el metacarácter \NR coincide con cualquier secuencia de nueva línea Unicode. Cuando el modo UTF-8 está desactivado, estas secuencias de nueva línea son el par \r\n, así como el retorno de carro, el salto de línea, el tabulador vertical, el salto de forma o los caracteres de línea siguiente. En modo UTF-8, el token también coincide con el separador de línea y el carácter separador de párrafo.
Dos modificadores de inicio de patrón permiten cambiar el comportamiento de \R:
✽ Con (*BSR_ANYCRLF), \R sólo coincide con la secuencia \r\n, \r o \n. Esto también puede ser establecido cuando PCRE es compilado o solicitado a través de la opción PCRE_BSR_ANYCRLF
✽ Con (*BSR_UNICODE), \R coincide con cualquier secuencia de nueva línea Unicode (anulando la opción PCRE_BSR_ANYCRLF si está establecida). Esto también puede establecerse cuando PCRE es compilado o solicitado a través de la opción PCRE_BSR_UNICODE
Controlando los patrones de fuga
Para limitar el número de veces que PCRE llama a la función match(), utilice el modificador (*LIMIT_MATCH=x), estableciendo x al número deseado.
Para limitar la recursividad, utilice (*LIMIT_RECURSION=d), estableciendo d al nivel de recursividad más profundo permitido.
Apagando las optimizaciones
(enlace directo)
Por defecto, PCRE estudia el patrón y automáticamente hace atómico un token cuantificado cuando el siguiente token es incompatible-por ejemplo convirtiendo A+X en A++X. El modificador (*NO_AUTO_POSSESS) desactiva esta optimización. Utilícelo cuando quiera usar pcretest para comparar dos patrones y sentirse bien por todos los ciclos que la auto-posesificación le está ahorrando.
Por defecto, PCRE realiza varias optimizaciones para averiguar más rápidamente si una coincidencia fallará. El modificador (*NO_START_OPT) desactiva estas optimizaciones.
Desactivar las coincidencias vacías
En PCRE2, (*NOTEMPTY) indica al motor que no devuelva coincidencias vacías. Del mismo modo, (*NOTEMPTY_ATSTART) le dice al motor que no devuelva las coincidencias vacías encontradas al principio del asunto.
Desactivar la optimización de anclaje automático
En PCRE2, PCRE2_NO_DOTSTAR_ANCHOR le dice al motor que no ancle automáticamente los patrones que empiezan por .
Puede leer más sobre esta bandera en la página de la API de PCRE2 (busque PCRE2_NO_DOTSTAR_ANCHOR).

¡No se pierda la Guía de estilo de Regex
y el mejor truco de Regex de todos los tiempos!


Las 1001 maneras de usar Regex

Deja una respuesta

Tu dirección de correo electrónico no será publicada.