Sintaxis de expresiones regulares
Esta descripción de expresiones regulares se basa parcialmente en la documentación de REGEXP, creada por Henry Spencer. Sally utiliza esa biblioteca para buscar coincidencias.
Sintaxis básica de expresiones regulares
- '^' - al principio coincide con el inicio de línea; por ejemplo, '^test' coincide con 'test' al principio de una línea
- '$' - al final coincide con el final de línea
- '.' - coincide con un carácter; 'do.' coincide con 'dog', 'dot', 'doe', etc.; 'd..r', con 'door', 'deer', etc.
- '*' - tras una expresión coincide con 0 o más apariciones; 'ad*' coincide con 'a', 'ad' y 'add': una 'a' seguida de cualquier cantidad de 'd'
- '+' - después de una expresión coincide con 1 o más apariciones; 'do+' coincide con 'do' y 'doo', una 'd' seguida de al menos una 'o'
- '?' - después de una expresión coincide con 0 o 1 aparición; 'add?' coincide con 'ad' y 'add', es decir, 'ad' seguido de una 'd' opcional
- '|' - entre expresiones coincide con cualquiera; 'red|blue|black' coincide con 'red', 'blue' o 'black'
- '[ ]' - coincide con un carácter de los incluidos entre corchetes; 'a[dts]' coincide con 'ad', 'at' o 'as'
- '[^ ]' - coincide con un carácter que no figure entre corchetes; '[^abc]' coincide con cualquiera excepto 'a', 'b' y 'c'
- '[-]' - indica un intervalo; '1[0-9]' coincide con los números de '10' a '19'
- '( )' - agrupa expresiones en una; '(very )*well' coincide con 'well', 'very well' y 'very very well', cualquier cantidad de 'very ' seguida de 'well'
- '\' - delante de un carácter coincide con él; 'too\.' coincide solo con 'too.', mientras 'too.' coincide con 'tool', 'took' y 'toon', es decir, 'too' seguido de cualquier carácter
Sintaxis de expresiones regulares
Una expresión regular consta de cero o más ramas separadas por '|'. Coincide con todo lo que coincida con una rama.
Una rama consta de cero o más partes concatenadas. Coincide con la primera seguida de la segunda, y así sucesivamente.
Una parte es un átomo seguido opcionalmente de '*', '+' o '?'. Con '*', coincide con cero o más repeticiones del átomo; con '+', una o más; con '?', una o la cadena vacía.
Un átomo es una expresión entre paréntesis (coincide con su resultado), un intervalo (véase más abajo), '.' (un carácter), '^' (cadena vacía al principio de línea), '$' (cadena vacía al final), '\' seguido de un carácter (ese carácter) o un carácter sin significado especial (ese carácter).
Un intervalo es una secuencia entre '[]' que normalmente coincide con un carácter de la secuencia. Si comienza por '^', coincide con uno ajeno al resto. Dos caracteres separados por '-' representan todos los ASCII entre ellos; '[0-9]' coincide con un dígito decimal. Para incluir ']' literalmente, póngalo primero tras el posible '^'. Para incluir '-', póngalo primero o último.
Ambigüedad
Si una expresión puede coincidir con dos partes distintas del texto, elige la que comienza antes. Si empiezan en el mismo punto con longitudes distintas, o la misma longitud de formas distintas, se aplican las reglas siguientes.
Las ramas se consideran de izquierda a derecha; '*', '+' y '?' prefieren las coincidencias más largas; las estructuras anidadas se evalúan de fuera adentro y las concatenadas desde la izquierda. Se elige la primera posibilidad que funciona.
Por ejemplo, '(ab|a)b*c' puede coincidir con 'abc' de dos formas. Primero se elige entre 'ab' y 'a'; como 'ab' aparece antes y permite la coincidencia completa, se utiliza. La 'b' ya está consumida, así que 'b*' debe elegir su última posibilidad, la cadena vacía, para respetar la decisión anterior.
Si no hay '|' y solo hay un '*', '+' o '?', se elige la coincidencia más larga posible. Así, 'ab*' en 'xabbbby' coincide con 'abbbb'. Pero en 'xabyabbbz' coincide con 'ab' tras 'x', por la regla de empezar antes.
From the Sally manual (GPL-2.0-or-later), © 1997-2023 Open Salamander Authors; © 2025-2026 Elias Bachaalany. Source: manual source (zip) · original page in the Sally repository