mirror of
https://github.com/ziishaned/learn-regex.git
synced 2025-08-05 11:06:46 -04:00
Merge remote-tracking branch 'zeeshanu/master'
This commit is contained in:
commit
07e95a9d4b
10
README-cn.md
10
README-cn.md
@ -12,6 +12,7 @@
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## 什么是正则表达式?
|
||||
|
||||
@ -100,7 +101,7 @@
|
||||
|*|匹配>=0个重复的在*号之前的字符.|
|
||||
|+|匹配>=1个重复的+号前的字符.
|
||||
|?|标记?之前的字符为可选.|
|
||||
|{n,m}|匹配num个中括号之前的字符 (n <= num <= m).|
|
||||
|{n,m}|匹配num个大括号之前的字符 (n <= num <= m).|
|
||||
|(xyz)|字符集, 匹配与 xyz 完全相等的字符串.|
|
||||
|||或运算符,匹配符号前或后的字符.|
|
||||
|\|转义字符,用于匹配一些保留的字符 <code>[ ] ( ) { } . * + ? ^ $ \ |</code>|
|
||||
@ -180,7 +181,7 @@
|
||||
|
||||
### 2.3.2 `+` 号
|
||||
|
||||
`+`号匹配`+`号之前的字符出现 >=1 次个字符.
|
||||
`+`号匹配`+`号之前的字符出现 >=1 次.
|
||||
例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着任意个字符的字符串.
|
||||
|
||||
<pre>
|
||||
@ -209,8 +210,7 @@
|
||||
## 2.4 `{}` 号
|
||||
|
||||
在正则表达式中 `{}` 是一个量词, 常用来一个或一组字符可以重复出现的次数.
|
||||
例如, 表达式 `[0-9]{2,3}` 匹配 2~3 位 0~9 的数字.
|
||||
|
||||
例如, 表达式 `[0-9]{2,3}` 匹配最少 2 位最多 3 位 0~9 的数字.
|
||||
|
||||
<pre>
|
||||
"[0-9]{2,3}" => The number was 9.<a href="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
||||
@ -356,7 +356,7 @@
|
||||
`?=...` 前置约束(存在), 表示第一部分表达式必须跟在 `?=...`定义的表达式之后.
|
||||
|
||||
返回结果只满足第一部分表达式.
|
||||
定义一个前置约束(存在)要使用 `()`. 在括号内部使用一个问号和等号: `(?=...)`.
|
||||
定义一个前置约束(存在)要使用 `()`. 在括号内部使用一个问号和等号: `(?=...)`.
|
||||
|
||||
前置约束的内容写在括号中的等号后面.
|
||||
例如, 表达式 `(T|t)he(?=\sfat)` 匹配 `The` 和 `the`, 在括号中我们又定义了前置约束(存在) `(?=\sfat)` ,即 `The` 和 `the` 后面紧跟着 `(空格)fat`.
|
||||
|
172
README-es.md
172
README-es.md
@ -3,22 +3,24 @@
|
||||
<img src="https://i.imgur.com/bYwl7Vf.png" alt="Learn Regex">
|
||||
</p><br/>
|
||||
|
||||
## Translations:
|
||||
## Traducciones:
|
||||
|
||||
* [English](README.md)
|
||||
* [Español](README-es.md)
|
||||
* [Français](README-fr.md)
|
||||
* [Português do Brasil](README-pt_BR.md)
|
||||
* [中文版](README-cn.md)
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## What is Regular Expression?
|
||||
## Qué es una expresión regular?
|
||||
> Una expresión regular es un grupo de caracteres o símbolos, los cuales son usados para buscar un patrón específico dentro de un texto.
|
||||
|
||||
Una expresión regular es un patrón que que se compara con una cadena de caracteres de izquierda a derecha. La palabra "expresión regular", puede también ser escrita como "Regex" o "Regexp". Las expresiones regulares se utiliza para remplazar un texto, dentro de un *string* (o cadena de caracteres), validar el formato, extraer un substring de un string completo basado en la coincidencia de una patrón, y muchas cosas más.
|
||||
Una expresión regular es un patrón que que se compara con una cadena de caracteres de izquierda a derecha. La palabra "expresión regular" puede también ser escrita como "Regex" o "Regexp". Las expresiones regulares se utilizan para remplazar un texto dentro de una cadena de caracteres (*string*), validar formularios, extraer una porción de una cadena de caracteres (*substring*) basado en la coincidencia de una patrón, y muchas cosas más.
|
||||
|
||||
Imagina que estas escribiendo una aplicación y quieres agregar reglas para cuando el usuario elija su nombre de usuario. Nosotros vamos a querer que el nombre de usuario contenga letras, números, guión bajo, y guíon medio. También vamos a querer limitar el número de caracteres en el nombre de usuario para que no se vea feo. Para ello usamos la siguiente expresión regular para validar el nombre de usuario
|
||||
Imagina que estás escribiendo una aplicación y quieres agregar reglas para cuando el usuario elija su nombre de usuario. Nosotros queremos permitir que el nombre de usuario contenga letras, números, guión bajo (raya), y guión medio. También queremos limitar el número de caracteres en el nombre de usuario para que no se vea feo. Para ello usamos la siguiente expresión regular para validar el nombre de usuario.
|
||||
|
||||
|
||||
<br/><br/>
|
||||
@ -26,41 +28,41 @@ Imagina que estas escribiendo una aplicación y quieres agregar reglas para cuan
|
||||
<img src="./img/regexp-es.png" alt="Expresión regular">
|
||||
</p>
|
||||
|
||||
De la expresión regular anterior, se puede aceptar las cadenas 'john_doe', 'jo-hn_doe' y 'john12_as'. La expresión no coincide con el nombre de usuario 'Jo', porque es una cadena de caracteres que contiene letras mayúsculas y es demasiado corta.
|
||||
La expresión regular anterior puede aceptar las cadenas `john_doe`, `jo-hn_doe` y `john12_as`. Sin embargo, la expresión no coincide con el nombre de usuario `Jo` porque es una cadena de caracteres que contiene letras mayúsculas y es demasiado corta.
|
||||
|
||||
## Tabla de contenido
|
||||
|
||||
- [Introducción](#1-introduccion)
|
||||
- [Meta caracteres](#2-meta-caracteres)
|
||||
- [Introducción](#1-introducción)
|
||||
- [Meta-caracteres](#2-meta-caracteres)
|
||||
- [Full stop](#21-full-stop)
|
||||
- [Conjunto de caracteres](#22-conjunto-de-caracteres)
|
||||
- [Conjunto de caracteres negados](#221-conjunto-de-caracteres-negado)
|
||||
- [Repeticiones](#23-repeticiones)
|
||||
- [Asterísco](#231-asterisco)
|
||||
- [Asterisco](#231-asterisco)
|
||||
- [Signo más](#232-signo-mas)
|
||||
- [Signo de pregunta](#233-signo-de-pregunta)
|
||||
- [Signo de interrogación](#233-signo-de-pregunta)
|
||||
- [Llaves](#24-llaves)
|
||||
- [Grupo de caracteres](#25-grupo-de-caracteres)
|
||||
- [Alternancia](#26-alternacia)
|
||||
- [Caracteres especiales de escape](#27-caracteres-especiales-de-escape)
|
||||
- [Anclas](#28-anclas)
|
||||
- [Símbolo de intercalación](#281-simbolo-de-intercalacion)
|
||||
- [Símbolo dolar](#282-simbolo-dolar)
|
||||
- [Símbolo del dólar](#282-simbolo-dolar)
|
||||
- [Conjunto de caracteres abreviados](#3-conjunto-de-caracteres-abreviados)
|
||||
- [Mirar alrededor](#4-mirar-alrededor)
|
||||
- [Mirar hacia delante positivo](#41-mirar-hacia-delante-positivo)
|
||||
- [Mirar hacia delante negativo](#41-mirar-hacia-delaten-negativo)
|
||||
- [Mirar hacia atrás positivo](#41-mirar-hacia-atras-positivo)
|
||||
- [Mirar hacia atrás negativo](#41-mirar-hacia-atras-negativo)
|
||||
- [Banderas](#5-banderas)
|
||||
- [mayúsculas y minúsculas](#51-mayusculas-y-minusculas)
|
||||
- [Indicadores](#5-indicadores)
|
||||
- [Mayúsculas y minúsculas](#51-mayusculas-y-minusculas)
|
||||
- [Búsqueda global](#52-busqueda-global)
|
||||
- [Multilinea](#53-multilinea)
|
||||
- [Bonus](#bonus)
|
||||
- [Multilínea](#53-multilinea)
|
||||
|
||||
|
||||
## 1. Introducción
|
||||
|
||||
Una expresión regular es sólo un patrón de caracteres que utilizamos para realizar búsquedas en un texto. Por ejemplo, la expresión regular «the» significa: la letra `t` seguida de la letra `h` seguida de la letra `e`.
|
||||
Una expresión regular es sólo un patrón de caracteres que utilizamos para realizar búsquedas en un texto. Por ejemplo, la expresión regular `the` significa: la letra `t`, seguida de la letra `h`, seguida de la letra `e`.
|
||||
|
||||
<pre>
|
||||
"the" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||
@ -76,28 +78,28 @@ La expresión regular `123` coincide con la cadena `123`. La expresión regular
|
||||
|
||||
[Prueba la expresión regular](https://regex101.com/r/1paXsy/1)
|
||||
|
||||
## 2. Meta caracteres
|
||||
## 2. Meta-caracteres
|
||||
|
||||
Los caracteres meta son los bloques de construcción de las expresiones regulares. Los meta caracteres no se sostienen a sí mismos, sino que se interpretan de alguna manera especial. Algunos meta caracteres tienen un significado especial y se escriben entre corchetes. Los meta caracteres son los siguientes:
|
||||
Los meta-caracteres son los bloques de construcción de las expresiones regulares. Los meta-caracteres no se sostienen a sí mismos, sino que se interpretan de alguna manera especial. Algunos meta-caracteres tienen un significado especial y se escriben entre corchetes. Los meta-caracteres son los siguientes:
|
||||
|
||||
|Meta character|Description|
|
||||
|Meta-carácter|Descripción|
|
||||
|:----:|----|
|
||||
|.|Periodo. Coincide con cualquier caracter excepto un salto de línea.|
|
||||
|[ ]|Clase caracter. Coincide con cualquier caracter contenido entre corchetes.|
|
||||
|[^ ]|Clase caracter negado. Coincide con cualquier caracter que no está contenido dentro de los corchetes.|
|
||||
|.|Período. Coincide con cualquier carácter excepto un salto de línea.|
|
||||
|[ ]|Clase de caracteres. Coincide con cualquier carácter contenido entre corchetes.|
|
||||
|[^ ]|Clase de caracteres negados. Coincide con cualquier carácter que no está contenido dentro de los corchetes.|
|
||||
|*|Corresponde con 0 o más repeticiones del símbolo precedente.|
|
||||
|+|Corresponde con 1 o más repeticiones del símbolo precedente.|
|
||||
|?|Hace que el símbolo precedente sea opcional.|
|
||||
|{n,m}|Llaves.Corresponde al menos "n" pero no más de "m" repeticiones del símbolo precedente.|
|
||||
|(xyz)|Grupo caracter. Hace coincidir los caracteres xyz en ese orden exacto.|
|
||||
|{n,m}|Llaves. Corresponde al menos "n" pero no más de "m" repeticiones del símbolo precedente.|
|
||||
|(xyz)|Grupo carácter. Hace coincidir los caracteres xyz en ese orden exacto.|
|
||||
|||Alternancia. Corresponde a los caracteres anteriores o los caracteres después del símbolo.|
|
||||
|\|Escapa el siguiente caracter. Esto le permite hacer coincidir los caracteres reservados <code>[ ] ( ) { } . * + ? ^ $ \ |</code>|
|
||||
|\|Escapa el siguiente carácter. Esto le permite hacer coincidir los caracteres reservados <code>[ ] ( ) { } . * + ? ^ $ \ |</code>|
|
||||
|^|Hace coincidir el principio de la entrada.|
|
||||
|$|Corresponde al final de la entrada.|
|
||||
|
||||
## 2.1 Full stop
|
||||
|
||||
Full stop `.` es el ejemplo más simple del meta-caracter. El caracter meta "." coincide con cualquier carácter. No coincidirá con el retorno o nuevos caracteres de línea. Por ejemplo, la expresión regular `.ar` significa: cualquier caracter, seguido de la letra`a`, seguido de la letra "r".
|
||||
Full stop `.` es el ejemplo más simple del meta-carácter. El meta-carácter `.` coincide con cualquier carácter. No coincidirá con el retorno o nuevos caracteres de línea. Por ejemplo, la expresión regular `.ar` significa: cualquier carácter, seguido del carácter `a`, seguido del carácter `r`.
|
||||
|
||||
<pre>
|
||||
".ar" => The <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
@ -107,7 +109,7 @@ Full stop `.` es el ejemplo más simple del meta-caracter. El caracter meta "."
|
||||
|
||||
## 2.2 Conjunto de caracteres
|
||||
|
||||
Los conjuntos de caracteres también se llaman clase de caracteres. Los corchetes se utilizan para especificar conjuntos de caracteres. Utilice un guión dentro de un conjunto de caracteres para especificar el rango de los caracteres. El orden del rango de caracteres dentro de corchetes no importa. Por ejemplo, la expresión regular "[Tt] he" significa: una letra mayúscula "T" o <minúscula> t, seguida de la letra "h" seguida de la letra "e"
|
||||
Los conjuntos de caracteres también se llaman clase de caracteres. Los corchetes se utilizan para especificar conjuntos de caracteres. Utilice un guión dentro de un conjunto de caracteres para especificar el rango de los caracteres. El orden del rango de caracteres dentro de corchetes no importa. Por ejemplo, la expresión regular `[Tt]he` significa: un carácter en mayúscula `T` o minúscula `t`, seguido del carácter `h`, seguido del carácter `e`.
|
||||
|
||||
<pre>
|
||||
"[Tt]he" => <a href="#learn-regex"><strong>The</strong></a> car parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
@ -115,7 +117,7 @@ Los conjuntos de caracteres también se llaman clase de caracteres. Los corchete
|
||||
|
||||
[Prueba la expresión regular](https://regex101.com/r/2ITLQ4/1)
|
||||
|
||||
Sin embargo, un período dentro de un conjunto de caracteres significa un período literal. La expresión regular `ar [.]` Significa: un carácter minúsculo `a`, seguido de la letra` r`, seguido de un carácter `.`.
|
||||
Sin embargo, un período dentro de un conjunto de caracteres significa un período literal. La expresión regular `ar[.]` significa: un carácter en minúscula `a`, seguido del carácter `r`, seguido del carácter `.`.
|
||||
|
||||
<pre>
|
||||
"ar[.]" => A garage is a good place to park a c<a href="#learn-regex"><strong>ar.</strong></a>
|
||||
@ -125,7 +127,7 @@ Sin embargo, un período dentro de un conjunto de caracteres significa un perío
|
||||
|
||||
### 2.2.1 Conjunto de caracteres negados
|
||||
|
||||
En general, el símbolo de intercalación representa el comienzo de la cadena, pero cuando se escribe después del corchete de apertura niega el conjunto de caracteres. Por ejemplo, la expresión regular `[^c] ar` significa: cualquier carácter, excepto `c`, seguido del carácter `a`, seguido de la letra `r`.
|
||||
En general, el símbolo de intercalación representa el comienzo de la cadena, pero cuando se escribe después del corchete de apertura niega el conjunto de caracteres. Por ejemplo, la expresión regular `[^c]ar` significa: cualquier carácter, excepto `c`, seguido del carácter `a`, seguido del carácter `r`.
|
||||
|
||||
<pre>
|
||||
"[^c]ar" => The car <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
@ -135,9 +137,9 @@ En general, el símbolo de intercalación representa el comienzo de la cadena, p
|
||||
|
||||
## 2.3 Repeticiones
|
||||
|
||||
Siguiendo los caracteres meta +, * o ?, se utilizan para especificar cuántas veces puede producirse un subpatrón. Estos meta-caracteres actúan de manera diferente en diferentes situaciones.
|
||||
Los siguientes caracteres meta `+`, `*` o `?`, se utilizan para especificar cuántas veces puede producirse un subpatrón. Estos meta-caracteres actúan de manera diferente en diferentes situaciones.
|
||||
|
||||
### 2.3.1 Asterísco
|
||||
### 2.3.1 Asterisco
|
||||
|
||||
El símbolo `*` coincide con cero o más repeticiones del marcador anterior. La expresión regular `a*` significa: cero o más repeticiones del carácter en minúscula precedente `a`. Pero si aparece después de un conjunto de caracteres o una clase, entonces encuentra las repeticiones de todo el conjunto de caracteres. Por ejemplo, la expresión regular `[a-z]*` significa: cualquier número de letras minúsculas en una fila.
|
||||
|
||||
@ -147,7 +149,7 @@ El símbolo `*` coincide con cero o más repeticiones del marcador anterior. La
|
||||
|
||||
[Prueba la expresión regular](https://regex101.com/r/7m8me5/1)
|
||||
|
||||
El símbolo `*` se puede utilizar con el meta-caracter `.` para que coincida con cualquier cadena de caracteres `.*`. El símbolo `*` se lo puede utilizar con el caracter de espacio en blanco `\s` para que coincida con una cadena de caracteres de espacio en blanco. Por ejemplo, la expresión "\s*cat\s*" significa: cero o más espacios, seguido por el carácter en minúscula `c`, seguido del carácter en minúscula `a`, seguido del carácter en minúscula `t`, seguido de cero o más espacios.
|
||||
El símbolo `*` se puede utilizar con el meta-carácter `.` para que coincida con cualquier cadena de caracteres `.*`. El símbolo `*` se puede utilizar con el carácter de espacio en blanco `\s` para que coincida con una cadena de caracteres de espacio en blanco. Por ejemplo, la expresión `\s*cat\s*` significa: cero o más espacios, seguido por el carácter en minúscula `c`, seguido del carácter en minúscula `a`, seguido del carácter en minúscula `t`, seguido de cero o más espacios.
|
||||
|
||||
<pre>
|
||||
"\s*cat\s*" => The fat<a href="#learn-regex"><strong> cat </strong></a>sat on the <a href="#learn-regex">con<strong>cat</strong>enation</a>.
|
||||
@ -157,7 +159,7 @@ El símbolo `*` se puede utilizar con el meta-caracter `.` para que coincida con
|
||||
|
||||
### 2.3.2 Signo más
|
||||
|
||||
El símbolo `+` coincide con una o más repeticiones del carácter anterior. Por ejemplo, la expresión regular `c.+T` significa: letra en minúscula `c`, seguida por al menos uno del mismo carácter, luego el carácter en minúscula `t`.
|
||||
El símbolo `+` coincide con una o más repeticiones del carácter anterior. Por ejemplo, la expresión regular `c.+T` significa: carácter en minúscula `c`, seguido por lo menos de un carácter, luego el carácter en minúscula `t`.
|
||||
|
||||
<pre>
|
||||
"c.+t" => The fat <a href="#learn-regex"><strong>cat sat on the mat</strong></a>.
|
||||
@ -165,9 +167,9 @@ El símbolo `+` coincide con una o más repeticiones del carácter anterior. Por
|
||||
|
||||
[Prueba la expresión regular](https://regex101.com/r/Dzf9Aa/1)
|
||||
|
||||
### 2.3.3 Signo de pregunta
|
||||
### 2.3.3 Signo de interrogación
|
||||
|
||||
En expresiones regulares el meta-caracter `?` hace que el caracter precedente sea opcional. Este símnbolo coincide con cero o una instancia del caracter precedente. Por ejemplo, la expresión regular `[T]?he` significa: El caracteropcional predecesor `T` seguido por la letra en minúscula `h`, seguido del caracter en minúscula `e`.
|
||||
En expresiones regulares el meta-carácter `?` hace que el carácter precedente sea opcional. Este símnbolo coincide con cero o una instancia del carácter precedente. Por ejemplo, la expresión regular `[T]?he` significa: El carácter opcional `T` seguido por el carácter en minúscula `h`, seguido del carácter en minúscula `e`.
|
||||
|
||||
<pre>
|
||||
"[T]he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in the garage.
|
||||
@ -183,7 +185,7 @@ En expresiones regulares el meta-caracter `?` hace que el caracter precedente se
|
||||
|
||||
## 2.4 Llaves
|
||||
|
||||
En la expresión regular, las llaves que también se denominan cuantificadores se utilizan para especificar el número de veces que se puede repetir un carácter o un grupo de caracteres. Por ejemplo, la expresión regular `[0-9]{2,3}` significa: Combina al menos 2 dígitos pero no más de 3 (caracteres del rango de 0 a 9).
|
||||
En la expresión regular, las llaves, que también se denominan cuantificadores, son utilizados para especificar el número de veces que se puede repetir un carácter o un grupo de caracteres. Por ejemplo, la expresión regular `[0-9]{2,3}` significa: Combina al menos 2 dígitos pero no más de 3 (caracteres en el rango de 0 a 9).
|
||||
|
||||
<pre>
|
||||
"[0-9]{2,3}" => The number was 9.<a href="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
||||
@ -207,7 +209,7 @@ Podemos dejar fuera el segundo número. Por ejemplo, la expresión regular `[0-9
|
||||
|
||||
## 2.5 Grupos de caracteres
|
||||
|
||||
Grupo de caracteres es un grupo de sub-patrones que se escribe dentro de paréntesis `(...)`. Como hemos discutido antes en la expresión regular si ponemos un cuantificador después de un caracter, repetiremos el caracter anterior. Pero si ponemos cuantificador después de un grupo de caracteres, entonces repetimos todo el grupo de caracteres. Por ejemplo, la expresión regular `(ab)*` coincide con cero o más repeticiones del caracter "ab". También podemos usar el caracter de alternancia `|` meta dentro del grupo de caracteres. Por ejemplo, la expresión regular `(c|g|p)ar` significa: caracter en minúscula `c`, `g` o `p`, seguido del caracter `a`, seguido del caracter `r`.
|
||||
Un grupo de caracteres es un grupo de sub-patrones que se escribe dentro de paréntesis `(...)`. Como hemos discutido antes en la expresión regular, si ponemos un cuantificador después de un carácter, repetiremos el carácter anterior. Pero si ponemos un cuantificador después de un grupo de caracteres, entonces repetimos todo el grupo de caracteres. Por ejemplo, la expresión regular `(ab)*` coincide con cero o más repeticiones del caracter `ab`. También podemos usar el carácter de alternancia `|` meta dentro del grupo de caracteres. Por ejemplo, la expresión regular `(c|g|p)ar` significa: carácter en minúscula `c`, `g` o `p`, seguido del carácter `a`, seguido del carácter `r`.
|
||||
<pre>
|
||||
"(c|g|p)ar" => The <a href="#learn-regex"><strong>car</strong></a> is <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
</pre>
|
||||
@ -216,7 +218,7 @@ Grupo de caracteres es un grupo de sub-patrones que se escribe dentro de parént
|
||||
|
||||
## 2.6 Alternancia
|
||||
|
||||
En la expresión regular se usa la barra vertical `|` para definir la alternancia. La alternancia es como una condición entre múltiples expresiones. Ahora, puedes estar pensando que el conjunto de caracteres y la alternancia funciona de la misma manera. Pero la gran diferencia entre el conjunto de caracteres y la alternancia es que el conjunto de caracteres funciona a nivel de caracter pero la alternancia funciona a nivel de expresión. Por ejemplo, la expresión regular `(T|t)he|car` significa: el carcter en mayúscula `T` o en minúscula `t`, seguido del caracter en minúscula `h`, seguido del caracter en minúscula `e` o del caracter en minúscula `c`, seguido de un caracter en minúscula `a`, seguido del carácter en minúscula `r`.
|
||||
En la expresión regular, la barra vertical `|` se utiliza para definir la alternancia. La alternancia es como una condición entre múltiples expresiones. Ahora, puedes estar pensando que el conjunto de caracteres y la alternancia funciona de la misma manera. Sin embargo, la gran diferencia entre el conjunto de caracteres y la alternancia es que el conjunto de caracteres funciona a nivel de carácter pero la alternancia funciona a nivel de expresión. Por ejemplo, la expresión regular `(T|t)he|car` significa: el carácter en mayúscula `T` o en minúscula `t`, seguido del carácter en minúscula `h`, seguido del carácter en minúscula `e` o del carácter en minúscula `c`, seguido de un carácter en minúscula `a`, seguido del carácter en minúscula `r`.
|
||||
|
||||
<pre>
|
||||
"(T|t)he|car" => <a href="#learn-regex"><strong>The</strong></a> <a href="#learn-regex"><strong>car</strong></a> is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
@ -226,7 +228,9 @@ En la expresión regular se usa la barra vertical `|` para definir la alternanci
|
||||
|
||||
## 2.7 Caracteres especiales de escape
|
||||
|
||||
La barra invertida `\` se utiliza en la expresión regular para escapar del carácter siguiente. Esto permite especificar un símbolo como un caracter coincidente incluyendo caracteres reservados `{}[]/\+*.^|?`. Por ejemplo, la expresión regular `.` se utiliza para coincidir con cualquier caracter, excepto la nueva línea. Ahora, para emparejar `.` en una cadena de entrada, la expresión regular `(f|c|m)at\.?` significa: la letra minúscula `f`, `c` o `m`, seguida del caracter en minúscula `a`, seguido de la letra minúscula `t`, seguida del caracter opcional `.`.
|
||||
La barra invertida `\` se utiliza en la expresión regular para escapar el carácter siguiente. Esto permite especificar un símbolo como un carácter coincidente incluyendo caracteres reservados `{}[]/\+*.^|?`. Para usar un carácter especial como un carácter coincidente, agrega `\` a su izquierda.
|
||||
|
||||
Por ejemplo, la expresión regular `.` se utiliza para coincidir con cualquier carácter, excepto la nueva línea. Ahora, para emparejar `.` en una cadena de entrada, la expresión regular `(f|c|m)at\.?` significa: el carácter en minúscula `f`, `c` o `m`, seguido del carácter en minúscula `a`, seguido del carácter en minúscula `t`, seguido del carácter opcional `.`.
|
||||
|
||||
<pre>
|
||||
"(f|c|m)at\.?" => The <a href="#learn-regex"><strong>fat</strong></a> <a href="#learn-regex"><strong>cat</strong></a> sat on the <a href="#learn-regex"><strong>mat.</strong></a>
|
||||
@ -236,11 +240,11 @@ La barra invertida `\` se utiliza en la expresión regular para escapar del car
|
||||
|
||||
## 2.8 Anclas
|
||||
|
||||
En expresiones regulares, usamos anclas para comprobar si el símbolo de coincidencia es el símbolo inicial o el símbolo final de la cadena de entrada. Los anclajes son de dos tipos: El primer tipo es el símbolo `^` que comprueba si el caracter coincidente es el caracter inicial de la entrada y el segundo tipo es Dollar `$` que comprueba si el caracter coincidente es el último caracter de la cadena de entrada.
|
||||
En expresiones regulares, usamos anclas para comprobar si el símbolo coincidente es el símbolo inicial o el símbolo final de la cadena de entrada. Los anclajes son de dos tipos: El primer tipo es el símbolo de intercalación `^` que comprueba si el carácter coincidente es el carácter inicial de la entrada y el segundo tipo es el símbolo del dólar `$` que comprueba si el carácter coincidente es el último carácter de la cadena de entrada.
|
||||
|
||||
### 2.8.1 Simbolo de intercalación
|
||||
### 2.8.1 Símbolo de intercalación
|
||||
|
||||
El símbolo de intercalación `^` se usa para verificar si el caracter coincidente es el primer caracter de la cadena de entrada. Si aplicamos la siguiente expresión regular `^a` (si a es el símbolo inicial) a la cadena de entrada `abc` coincide con `a`. Pero si aplicamos la expresión regular `^b` en la cadena de entrada anterior, no coincide con nada. Porque en la cadena de entrada `abc` "b" no es el símbolo inicial. Vamos a echar un vistazo a otra expresión regular `^(T|t)he`, significa: mayúsculas `T` o la letra minúscula `t` es el símbolo inicial de la cadena de entrada, seguido del caracter minúscula `h` y seguido del caracter en minúscula `e`.
|
||||
El símbolo de intercalación `^` se usa para verificar si el carácter coincidente es el primer carácter de la cadena de entrada. Si aplicamos la siguiente expresión regular `^a` (si `a` es el símbolo inicial) a la cadena de entrada, `abc` coincide con `a`. Pero si aplicamos la expresión regular `^b` en la cadena de entrada anterior, no coincide con nada. Porque en la cadena de entrada `abc`, `b` no es el símbolo inicial. Vamos a echar un vistazo a la expresión regular `^(T|t)he` que significa: carácter en mayúscula `T` o carácter en minúscula `t` es el símbolo inicial de la cadena de entrada, seguido del carácter minúscula `h` y seguido del carácter en minúscula `e`.
|
||||
|
||||
<pre>
|
||||
"(T|t)he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
@ -254,9 +258,9 @@ El símbolo de intercalación `^` se usa para verificar si el caracter coinciden
|
||||
|
||||
[Prueba la expresión regular](https://regex101.com/r/jXrKne/1)
|
||||
|
||||
### 2.8.2 Símbolo dolar
|
||||
### 2.8.2 Símbolo del dólar
|
||||
|
||||
El símbolo de dólar `$` se utiliza para comprobar si el caracter coincidente es el último carácter de la cadena de entrada. Por ejemplo, la expresión regular `(at\.)$` significa: un caracter en minúscula `a`, seguido del caracter en minúscula `t` seguido de un carácter `.` y el marcador debe ser el final de la cadena.
|
||||
El símbolo del dólar `$` se utiliza para comprobar si el carácter coincidente es el último carácter de la cadena de entrada. Por ejemplo, la expresión regular `(at\.)$` significa: un carácter en minúscula `a`, seguido del carácter en minúscula `t`, seguido de un carácter `.` y el marcador debe ser el final de la cadena.
|
||||
|
||||
<pre>
|
||||
"(at\.)" => The fat c<a href="#learn-regex"><strong>at.</strong></a> s<a href="#learn-regex"><strong>at.</strong></a> on the m<a href="#learn-regex"><strong>at.</strong></a>
|
||||
@ -276,9 +280,9 @@ La expresión regular proporciona abreviaturas para los conjuntos de caracteres
|
||||
comúnmente utilizados, que ofrecen abreviaturas convenientes para expresiones
|
||||
regulares de uso común. Los conjuntos de caracteres abreviados son los siguientes:
|
||||
|
||||
|Shorthand|Description|
|
||||
|Abreviatura|Descripción|
|
||||
|:----:|----|
|
||||
|.|Cualquier caracter excepto la nueva línea|
|
||||
|.|Cualquier carácter excepto nueva línea|
|
||||
|\w|Coincide con los caracteres alfanuméricos: `[a-zA-Z0-9_]`|
|
||||
|\W|Coincide con los caracteres no alfanuméricos: `[^\w]`|
|
||||
|\d|Coincide con dígitos: `[0-9]`|
|
||||
@ -288,9 +292,9 @@ regulares de uso común. Los conjuntos de caracteres abreviados son los siguient
|
||||
|
||||
## 4. Mirar alrededor
|
||||
|
||||
Mirar hacia delante (lookaheds) y mirar hacia atrás (Lookbehind) a veces conocidos
|
||||
como lookaround son tipo específico de ***grupo que no captura*** (Utilice para
|
||||
coincidir con el patrón pero no se incluye en la lista correspondiente). Los
|
||||
Mirar hacia delante (lookahead) y mirar hacia atrás (lookbehind), a veces conocidos
|
||||
como lookaround, son tipo específico de **grupo que no captura** (Utilizados para
|
||||
coincidir con el patrón pero no se incluyen en la lista correspondiente). Los
|
||||
lookaheads se usan cuando tenemos la condición de que este patrón es precedido o
|
||||
seguido por otro patrón determinado. Por ejemplo, queremos obtener todos los números
|
||||
que están precedidos por el carácter `$` de la siguiente cadena de entrada
|
||||
@ -299,25 +303,25 @@ esto significa: obtener todos los números que contienen el carácter `.` y
|
||||
están precedidos del carácter `$`. A continuación se muestran los lookarounds
|
||||
que se utilizan en expresiones regulares:
|
||||
|
||||
|Symbol|Description|
|
||||
|Símbolo|Descripción|
|
||||
|:----:|----|
|
||||
|?=|Positive Lookahead|
|
||||
|?!|Negative Lookahead|
|
||||
|?<=|Positive Lookbehind|
|
||||
|?<!|Negative Lookbehind|
|
||||
|?=|Lookahead Positivo|
|
||||
|?!|Lookahead Negativo|
|
||||
|?<=|Lookbehind Positivo|
|
||||
|?<\!|Lookbehind Negativo|
|
||||
|
||||
### 4.1 Mirar hacia adelate positiva
|
||||
## 4.1 Mirar hacia adelate positiva
|
||||
|
||||
El lookahead positivo afirma que la primera parte de la expresión debe ser
|
||||
seguida por la expresión lookahead. El matchonly devuelto contiene el texto que
|
||||
seguida por la expresión lookahead. La coincidencia devuelta sólo contiene el texto que
|
||||
coincide con la primera parte de la expresión. Para definir un lookahead positivo,
|
||||
se utilizan paréntesis. Dentro de esos paréntesis, un signo de interrogación con
|
||||
signo igual se utiliza de esta manera: `(?= ...)`. La expresión de Lookahead se
|
||||
escribe después del signo igual dentro de los paréntesis. Por ejemplo, la
|
||||
expresión regular `[T|t]he (?=\Sfat) significa: opcionalmente emparejar
|
||||
la letra minúscula `t` o la letra mayúscula `T`, seguida de la letra `h`, seguida
|
||||
de la letra `e`. Entre paréntesis definimos lookahead positivo que indica al motor
|
||||
de expresión regular que coincida con `The` o` the` seguido de la palabra `fat`.
|
||||
expresión regular `[T|t]he (?=\Sfat)` significa: opcionalmente emparejar
|
||||
el carácter en minúscula `t` o el carácter en mayúscula `T`, seguida del carácter `h`, seguida
|
||||
del carácter `e`. Entre paréntesis definimos el lookahead positivo que indica al motor
|
||||
de expresión regular que coincida con `The` o `the` seguido de la palabra `fat`.
|
||||
|
||||
<pre>
|
||||
"[T|t]he(?=\sfat)" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||
@ -330,9 +334,9 @@ de expresión regular que coincida con `The` o` the` seguido de la palabra `fat`
|
||||
El lookahead negativo se usa cuando necesitamos obtener todas las coincidencias
|
||||
de la cadena de entrada que no son seguidas por un patrón. El aspecto negativo se
|
||||
define de la misma manera que definimos el aspecto positivo, pero la única diferencia
|
||||
es que en lugar del caracter igual `=` utilizamos la negción `!` , es decir,
|
||||
es que en lugar del carácter igual `=` utilizamos carácter negación `!` , es decir,
|
||||
`(?! ...)`. Vamos a echar un vistazo a la siguiente expresión regular `[T|t]he(?!\Sfat)`
|
||||
que significa: obtener todas las `The` o `the` seguidos por la palabra `fat` precedido por un carácter de espacio.
|
||||
que significa: obtener todas las `The` o `the` seguidos por la palabra `fat` precedido por un carácter de espacio.
|
||||
|
||||
|
||||
<pre>
|
||||
@ -344,7 +348,7 @@ que significa: obtener todas las `The` o `the` seguidos por la palabra `fat` pr
|
||||
### 4.3 Mirar hacia atras positiva
|
||||
|
||||
Positivo lookbehind se utiliza para obtener todos los caracteres que están precedidos
|
||||
por un patrón específico. La apariencia positiva se denomina `(?<=...)`.
|
||||
por un patrón específico. La apariencia positiva se denotar por `(?<=...)`.
|
||||
Por ejemplo, la expresión regular `(? <= [T|t]he\s)(fat|mat)` significa: obtener todas las palabras
|
||||
`fat` o `mat` de la cadena de entrada después de la palabra `The` o `the`.
|
||||
|
||||
@ -368,26 +372,26 @@ la palabra` The` o `the`.
|
||||
|
||||
[Prueba la expresión regular](https://regex101.com/r/8Efx5G/1)
|
||||
|
||||
## 5. Banderas
|
||||
## 5. Indicadores
|
||||
|
||||
Los indicadores también se llaman modificadores porque modifican la salida
|
||||
de una expresión regular. Estos indicadores se pueden utilizar en cualquier orden
|
||||
o combinación, y son una parte integral de RegExp.
|
||||
|
||||
|
||||
|Bandera|Descripción|
|
||||
|Indicador|Descripción|
|
||||
|:----:|----|
|
||||
|i|Insensible a mayúsculas y minúsculas: ajusta la coincidencia para que no distinga mayúsculas y minúsculas.|
|
||||
|g|Búsqueda global: busque un patrón en toda la cadena de entrada.|
|
||||
|m|Multilinea: Ancla meta caracter trabaja en cada linea.|
|
||||
|i|Insensible a mayúsculas y minúsculas: Ajusta la coincidencia para que no distinga mayúsculas y minúsculas.|
|
||||
|g|Búsqueda global: Busca un patrón en toda la cadena de entrada.|
|
||||
|m|Multilínea: Ancla meta carácter trabaja en cada línea.|
|
||||
|
||||
### 5.1 Mayúscula y minúscula
|
||||
|
||||
El modificador `i` se utiliza para realizar la coincidencia entre mayúsculas y
|
||||
minúsculas. Por ejemplo, la expresión regular `/The/gi` significa: letra mayúscula
|
||||
`T`, seguido del caracter en minúscula `h`, seguido del carácter `e`. Y al final
|
||||
minúsculas. Por ejemplo, la expresión regular `/The/gi` significa: carácter en mayúscula
|
||||
`T`, seguido del carácter en minúscula `h`, seguido del carácter `e`. Y al final
|
||||
de la expresión regular, el indicador `i` indica al motor de expresiones
|
||||
regulares que ignore el caso. Como puede ver, también ofrecemos el indicador
|
||||
regulares que ignore el caso. Como puede ver, también proveimos el indicador
|
||||
`g` porque queremos buscar el patrón en toda la cadena de entrada.
|
||||
|
||||
|
||||
@ -408,9 +412,10 @@ regulares que ignore el caso. Como puede ver, también ofrecemos el indicador
|
||||
El modificador `g` se utiliza para realizar una coincidencia global
|
||||
(encontrar todos las coincidencias en lugar de detenerse después de la primera coincidencia).
|
||||
Por ejemplo, la expresión regular `/.(At)/g` significa: cualquier carácter,
|
||||
excepto la nueva línea, seguido del caracter minúsculo `a`, seguido del caracter
|
||||
en minúscula `t`. Debido a que siempre `g` prevee la bandera al final de la expresión
|
||||
regular ahora encontrará todas las coincidencias de toda la cadena de entrada.
|
||||
excepto la nueva línea, seguido del carácter en minúscula `a`, seguido del carácter
|
||||
en minúscula `t`. Debido a que proveimos el indicador `g` al final de la expresión
|
||||
regular, ahora encontrará todas las coincidencias de toda la cadena de entrada, no sólo la
|
||||
primera instancia (el cual es el comportamiento normal).
|
||||
|
||||
|
||||
<pre>
|
||||
@ -425,15 +430,14 @@ regular ahora encontrará todas las coincidencias de toda la cadena de entrada.
|
||||
|
||||
[Prueba la expresión regular](https://regex101.com/r/dO1nef/1)
|
||||
|
||||
### 5.3 Multilinea
|
||||
### 5.3 Multilínea
|
||||
|
||||
El modificador `m` se utiliza para realizar una coincidencia de varias líneas.
|
||||
Como analizamos anteriormente, las anclas `(^,$)` se utilizan para comprobar si
|
||||
el patrón es el comienzo de la entrada o el final de la cadena de entrada. Pero
|
||||
si queremos que las anclas funcionen en cada línea usamos la bandera `m`.
|
||||
Por ejemplo, la expresión regular `/at(.)?$/Gm`
|
||||
significa: caracter en minúscula` a`, seguido del caracter minúsculo `t`,
|
||||
opcionalmente cualquier cosa menos la nueva línea. Y debido a `m` bandera ahora
|
||||
si queremos que las anclas funcionen en cada línea usamos el indicador `m`.
|
||||
Por ejemplo, la expresión regular `/at(.)?$/Gm` significa: carácter en minúscula `a`, seguido del carácter en minúscula `t`,
|
||||
opcionalmente cualquier cosa menos la nueva línea. Y debido al indicador `m`, ahora
|
||||
el motor de expresión regular coincide con el patrón al final de cada línea de una cadena.
|
||||
|
||||
<pre>
|
||||
@ -452,13 +456,13 @@ el motor de expresión regular coincide con el patrón al final de cada línea d
|
||||
|
||||
[Prueba la expresión regular](https://regex101.com/r/E88WE2/1)
|
||||
|
||||
## Contribution
|
||||
## Contribución
|
||||
|
||||
* Report issues
|
||||
* Open pull request with improvements
|
||||
* Spread the word
|
||||
* Reach out to me directly at ziishaned@gmail.com or [](https://twitter.com/ziishaned)
|
||||
* Reporta un problema
|
||||
* Abre un pull request con mejoras
|
||||
* Pasa la palabra
|
||||
* Contáctame directamente a ziishaned@gmail.com o [](https://twitter.com/ziishaned)
|
||||
|
||||
## License
|
||||
## Licencia
|
||||
|
||||
MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
|
||||
|
@ -12,6 +12,7 @@
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## Qu'est-ce qu'une expression régulière?
|
||||
|
||||
|
552
README-gr.md
Normal file
552
README-gr.md
Normal file
@ -0,0 +1,552 @@
|
||||
<br/>
|
||||
<p align="center">
|
||||
<img src="https://i.imgur.com/bYwl7Vf.png" alt="Learn Regex">
|
||||
</p><br/>
|
||||
|
||||
## Μεταφράσεις:
|
||||
|
||||
* [English](README.md)
|
||||
* [Español](README-es.md)
|
||||
* [Français](README-fr.md)
|
||||
* [Português do Brasil](README-pt_BR.md)
|
||||
* [中文版](README-cn.md)
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## Τι είναι μια Κανονική Έκφραση (Regular Expression);
|
||||
|
||||
> Μια κανονική έκφραση είναι μια ομάδα χαρακτήρων ή συμβόλων που χρησιμοποιούνται για την εύρεση ενός συγκεκριμένου μοτίβου χαρακτήρων μέσα σ'ένα κείμενο.
|
||||
|
||||
Μια κανονική έκφραση, είναι μια σειρά χαρακτήρων τους οποίους αναζητούμε μέσα σε ένα κείμενο. Η αναζήτηση αυτή
|
||||
ξεκινά από τα αριστερά και συνεχίζει προς τα δεξιά. Ο όρος "Κανονική Έκφραση" είναι κάπως μεγάλος οπότε πολύ συχνά
|
||||
θα τον συναντήσετε στην συντομότερη μορφή του ως "regex" ή "regexp". Οι εκφράσεις αυτές χρησιμοποιούνται
|
||||
για αντικατάσταση λέξεων μέσα σε κείμενο, για επικυρώσεις τύπων, για αποκοπή ενός κομματιού
|
||||
string με βάση κάποιου μοτίβου αναζήτησης και για πολλά άλλα.
|
||||
|
||||
Φανταστείτε ότι πρέπει να γράψουμε μια εφαρμογή και ότι θέλουμε να ορίσουμε κανόνες για την δημιουργία
|
||||
ονόματος χρήστη (username). Σ'αυτή την περίπτωση, θέλουμε να επιτρέψουμε την χρήση γραμμάτων και
|
||||
αριθμών καθώς και την παύλα και κάτω παύλα. Θέλουμε επίσης να περιορίσουμε τον αριθμό χαρακτήρων
|
||||
του ονόματος χρήστη ώστε να μην φαίνεται μεγάλο και άσχημο. Για να το κάνουμε αυτό, μπορούμε να χρησιμοποιήσουμε
|
||||
την παρακάτω κανονική έκφραση:
|
||||
|
||||
<br/><br/>
|
||||
<p align="center">
|
||||
<img src="./img/regexp-en.png" alt="Regular expression">
|
||||
</p>
|
||||
|
||||
Η παραπάνω κανονική έκφραση θα δεχτεί ως σωστά τα ονόματα χρήστη `john_doe`, `jo-hn_doe` και
|
||||
`john12_as`. Όμως δεν θα δεχτεί το `Jo` αφού περιέχει ένα κεφαλαίο γράμμα και είναι πολύ
|
||||
μικρό.
|
||||
|
||||
## Πίνακας Περιεχομένων
|
||||
|
||||
- [Βασικά Μοτίβα Αναζήτησης](#1-Βασικά-Μοτίβα-Αναζήτησης)
|
||||
- [Μεταχαρακτήρες](#2-Μεταχαρακτήρες)
|
||||
- [Τελεία](#21-Τελεία)
|
||||
- [Σύνολα Χαρακτήρων](#22-Σύνολα-Χαρακτήρων)
|
||||
- [Σύνολο Χαρακτήρων προς Εξαίρεση](#221-Σύνολο-Χαρακτήρων-προς-Εξαίρεση)
|
||||
- [Επαναλήψεις](#23-Επαναλήψεις)
|
||||
- [Ο Αστερίσκος](#231-Ο-Αστερίσκος)
|
||||
- [Το Σύμβολο της Πρόσθεσης](#232-Το-Σύμβολο-της-Πρόσθεσης)
|
||||
- [Το Ερωτηματικό](#233-Το-Ερωτηματικό)
|
||||
- [Αγκύλες](#24-Αγκύλες)
|
||||
- [Ομάδα Χαρακτήρων](#25-Ομάδα-Χαρακτήρων)
|
||||
- [Εναλλαγή](#26-Εναλλαγή)
|
||||
- [Ειδικός Χαρακτήρας Διαφυγής](#27-Ειδικός-Χαρακτήρας-Διαφυγής)
|
||||
- [Σύμβολα "Άγκυρες"](#28-Σύμβολα-"Άγκυρες")
|
||||
- [Το Σύμβολο ^](#281-Το-Σύμβολο-^)
|
||||
- [Το Δολάριο](#282-Το-Δολάριο)
|
||||
- [Συντομογραφίες Συνόλων Χαρακτήρων](#3-Συντομογραφίες-Συνόλων-Χαρακτήρων)
|
||||
- [Αναζήτηση](#4-Αναζήτηση)
|
||||
- [Θετική Αναζήτηση προς τα Μπροστά](#41-Θετική-Αναζήτηση-προς-τα-Μπροστά)
|
||||
- [Αρνητική Αναζήτηση προς τα Μπροστά](#42-Αρνητική-Αναζήτηση-προς-τα-Μπροστά)
|
||||
- [Θετική Αναζήτηση προς τα Πίσω](#43-Θετική-Αναζήτηση-προς-τα-Πίσω)
|
||||
- [Αρνητική Αναζήτηση προς τα Πίσω](#44-Αρνητική-Αναζήτηση-προς-τα-Πίσω)
|
||||
- [Σημαίες](#5-Σημαίες)
|
||||
- [Χωρίς Διάκριση Πεζών-Κεφαλαίων](#51-Χωρίς-Διάκριση-Πεζών-Κεφαλαίων)
|
||||
- [Καθολική Αναζήτηση](#52-Καθολική-Αναζήτηση)
|
||||
- [Πολλές Γραμμές](#53-Πολλές-Γραμμές)
|
||||
|
||||
## 1. Βασικά Μοτίβα Αναζήτησης
|
||||
|
||||
Μια κανονική έκφραση είναι απλώς ένα μοτίβο, δηλαδή μια σειρά χαρακτήρων, που χρησιμοποιούμε ώστε να κάνουμε
|
||||
αναζήτηση σε ένα κείμενο (πχ για να βρούμε ένα γράμμα ή μια λέξη κλπ). Για παράδειγμα, η κανονική έκφραση `the`
|
||||
αναπαριστά: το γράμμα `t`, ακολουθούμενο από το γράμμα `h`, ακολουθούμενο από το γράμμα `e`.
|
||||
|
||||
<pre>
|
||||
"the" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/dmRygT/1)
|
||||
|
||||
Η κανονική έκφραση `123` "ταιριάζει" με το string `123`. Η έκφραση αυτή
|
||||
αναζητείται μέσα σ'ένα string εισόδου αντιστοιχίζοντας κάθε χαρακτήρα της με κάθε
|
||||
χαρακτήρα του string. Οι κανονικές εκφράσεις συνήθως λαμβάνουν υπόψη το αν τα γράμματα είναι
|
||||
κεφαλαία ή πεζά και άρα η έκφραση `The` δεν θα ταίριαζε με το string `the`.
|
||||
|
||||
<pre>
|
||||
"The" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/1paXsy/1)
|
||||
|
||||
## 2. Μεταχαρακτήρες
|
||||
|
||||
Οι μεταχαρακτήρες είναι τα δομικά στοιχεία των κανονικών εκφράσεων. Δεν αντιπροσωπεύουν
|
||||
τον εαυτό τους αλλά ερμηνεύονται με ειδικό τρόπο. Μερικοί από αυτούς, έχουν
|
||||
ειδικό νόημα και γι'αυτό γράφονται μέσα σε αγκύλες. Οι μεταχαρακτήρες είναι οι παρακάτω:
|
||||
|
||||
|Μεταχαρακτήρας|Περιγραφή|
|
||||
|:----:|----|
|
||||
|.|Η τελεία είναι ισοδύναμη με οποιονδήποτε μεμονωμένο χαρακτήρα εκτός από αυτόν για αλλαγή γραμμής.|
|
||||
|[ ]|Κλάση χαρακτήρων. Είναι ισοδύναμη με οποιονδήποτε χαρακτήρα βρίσκεται μέσα σε αγκύλες.|
|
||||
|[^ ]|Κλάση χαρακτήρων εξαίρεσης. Είναι ισοδύναμη με οποιονδήποτε χαρακτήρα δεν βρίσκεται μέσα σε αγκύλες|
|
||||
|*|Ταιριάζει με 0 ή παραπάνω επαναλήψεις του προηγούμενου συμβόλου.|
|
||||
|+|Ταιριάζει με 1 ή παραπάνω επαναλήψεις του προηγούμενου συμβόλου.|
|
||||
|?|Κάνει το προηγούμενο σύμβολο προαιρετικό.|
|
||||
|{n,m}|Αγκύλες. Ταιριάζει με τουλάχιστον "n" αλλά όχι με παραπάνω από "m" επαναλήψεις του προηγούμενου συμβόλου.|
|
||||
|(xyz)|Ομάδα χαρακτήρων. Είναι ισοδύναμη με τους χαρακτήρες xyz ακριβώς με την σειρά στην οποία βρίσκονται.|
|
||||
|||Εναλλαγή. Ταιριάζει είτε με τους χαρακτήρες που βρίσκονται πριν είτε μετά το σύμβολο.|
|
||||
|\|Παραλείπει το ειδικό νόημα του χαρακτήρα. Αυτό μας επιτρέπει να ταιριάξουμε χαρακτήρες
|
||||
ειδικής χρήσης <code>[ ] ( ) { } . * + ? ^ $ \ |</code>|
|
||||
|^|Αναζητά το μοτίβο που ακολουθεί στην αρχή μιας εισόδου.|
|
||||
|$|Αναζητά το μοτίβο που ακολουθεί στο τέλος μιας εισόδου.|
|
||||
|
||||
## 2.1 Τελεία
|
||||
|
||||
Η τελεία `.` είναι το πιο απλό παράδειγμα μεταχαρακτήρα. Είναι ισοδύναμη με οποιονδήποτε
|
||||
μεμονωμένο χαρακτήρα με εξαίρεση τον χαρακτήρα για επιστροφή στην αρχή της γραμμής
|
||||
και αυτόν για νέα σειρά. Για παράδειγμα, η κανονική έκφραση `.ar` αναπαριστά: οποιονδήποτε
|
||||
χαρακτήρα που ακολουθείται από το γράμμα `a`, που με την σειρά του ακολουθείται από το γράμμα `r`.
|
||||
|
||||
<pre>
|
||||
".ar" => The <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/xc9GkU/1)
|
||||
|
||||
## 2.2 Σύνολα Χαρακτήρων
|
||||
|
||||
Τα σύνολα χαρακτήρων καλούνται αλλιώς και κλάσεις χαρακτήρων. Τα σύνολα αυτά γράφονται μέσα
|
||||
σε αγκύλες. Για τον ορισμό της εμβέλειας ενός τέτοιου συνόλου χρησιμοποιείται μια παύλα
|
||||
για να διαχωρίζει την αρχή από το τέλος. Η σειρά των χαρακτήρων, που βρίσκονται μέσα στην
|
||||
εμβέλεια του συνόλου που ορίζεται από τις αγκύλες, δεν έχει σημασία. Για παράδειγμα,
|
||||
η κανονική έκφραση `[Tt]he` αναπαριστά: ένα κεφαλαίο `T` ή ένα πεζό `t`, που ακολουθείται
|
||||
από το γράμμα `h`, που με τη σειρά του ακολουθείται από το γράμμα `e`.
|
||||
|
||||
<pre>
|
||||
"[Tt]he" => <a href="#learn-regex"><strong>The</strong></a> car parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/2ITLQ4/1)
|
||||
|
||||
Όμως, μια τελεία μέσα σε ένα σύνολο χαρακτήρων, είναι μια κλασική τελεία και δεν εκλαμβάνεται
|
||||
ως μεταχαρακτήρας. Η κανονική έκφραση `ar[.]` αναπαριστά: ένα πεζό γράμμα `a`, που
|
||||
ακολουθείται από το γράμμα `r`, που με την σειρά του ακολουθείται από τον χαρακτήρα `.`.
|
||||
|
||||
<pre>
|
||||
"ar[.]" => A garage is a good place to park a c<a href="#learn-regex"><strong>ar.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/wL3xtE/1)
|
||||
|
||||
### 2.2.1 Σύνολο Χαρακτήρων προς Εξαίρεση
|
||||
|
||||
Γενικά, το σύμβολο ^ αναπαριστά την αρχή ενός string, αλλά όταν βρίσκεται
|
||||
μέσα σε αγκύλες ([] όχι {}), αναπαριστά ένα σύνολο χαρακτήρων που θα εξαιρεθούν από την διαδικασία
|
||||
της αναζήτησης. Για παράδειγμα, η κανονική έκφραση `[^c]ar` αναπαριστά: οποιονδήποτε χαρακτήρα
|
||||
εκτός από το `c`, που ακολουθείται από τον χαρακτήρα `a`, που ακολουθείται από
|
||||
το `r`.
|
||||
|
||||
<pre>
|
||||
"[^c]ar" => The car <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/nNNlq3/1)
|
||||
|
||||
## 2.3 Επαναλήψεις
|
||||
|
||||
Οι μεταχαρακτήρες `+`, `*` και `?`, χρησιμοποιούνται για να προσδιοριστεί
|
||||
το πόσες φορές επαναλαμβάνεται ένα υπό-μοτίβο χαρακτήρων μέσα στο string εισόδου. Αυτοί οι
|
||||
μεταχαρακτήρες συμπεριφέρονται διαφορετικά ανάλογα με την περίσταση.
|
||||
|
||||
### 2.3.1 Ο Αστερίσκος
|
||||
|
||||
Το σύμβολο `*` ψάχνει για μηδέν ή παραπάνω επαναλήψεις της έκφρασης
|
||||
που βρίσκεται πριν από αυτό. Η κανονική έκφραση `a*` αναπαριστά: αναζήτηση για μηδέν ή παραπάνω
|
||||
επαναλήψεις του πεζού χαρακτήρα `a`. Όταν το σύμβολο * βρίσκεται μετά από ένα σύνολο
|
||||
ή κλάση χαρακτήρων, τότε εντοπίζει ολόκληρο το σύνολο όσες φορές και αν υπάρχει σε μια
|
||||
γραμμή. Για παράδειγμα, η κανονική έκφραση `[a-z]*` αναπαριστά: οποιονδήποτε συνδυασμό
|
||||
πεζών γραμμάτων που βρίσκονται στην σειρά.
|
||||
|
||||
<pre>
|
||||
"[a-z]*" => T<a href="#learn-regex"><strong>he</strong></a> <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>parked</strong></a> <a href="#learn-regex"><strong>in</strong></a> <a href="#learn-regex"><strong>the</strong></a> <a href="#learn-regex"><strong>garage</strong></a> #21.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/7m8me5/1)
|
||||
|
||||
Το σύμβολο `*` μπορεί να χρησιμοποιηθεί σε συνδυασμό με τον χαρακτήρα `.` ώστε
|
||||
να αναζητηθεί μια ακολουθία χαρακτήρων. Μπορεί επίσης να χρησιμοποιηθεί με τον
|
||||
χαρακτήρα κενού `\s` ώστε να αναζητηθεί μια ακολουθία κενών. Για παράδειγμα, η
|
||||
έκφραση `\s*cat\s*` αναπαριστά: μηδέν ή περισσότερα κενά, που ακολουθούνται από
|
||||
τον πεζό χαρακτήρα `c`, που ακολουθείται από τον πεζό χαρακτήρα `a`, που ακολουθείται
|
||||
από τον πεζό χαρακτήρα `t`, που ακολουθείται από μηδέν ή περισσότερα κενά.
|
||||
|
||||
<pre>
|
||||
"\s*cat\s*" => The fat<a href="#learn-regex"><strong> cat </strong></a>sat on the <a href="#learn-regex">con<strong>cat</strong>enation</a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/gGrwuz/1)
|
||||
|
||||
### 2.3.2 Το Σύμβολο της Πρόσθεσης
|
||||
|
||||
Με σύμβολο `+` γίνεται αναζήτηση για μία ή περισσότερες επαναλήψεις του προηγούμενου του χαρακτήρα.
|
||||
Για παράδειγμα, η κανονική έκφραση `c.+t` αναπαριστά: το πεζό γράμμα `c`, που ακολουθείται
|
||||
από τουλάχιστον ένα χαρακτήρα, που ακολουθείται από το πεζό γράμμα `t`. Πρέπει να διευκρινίσουμε
|
||||
ότι το `t` είναι το τελευταίο `t` της πρότασης.
|
||||
|
||||
<pre>
|
||||
"c.+t" => The fat <a href="#learn-regex"><strong>cat sat on the mat</strong></a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/Dzf9Aa/1)
|
||||
|
||||
### 2.3.3 Το Ερωτηματικό
|
||||
|
||||
Σε μια κανονική έκφραση, ο μεταχαρακτήρας `?` κάνει τον χαρακτήρα που βρίσκεται πριν από αυτόν,
|
||||
προαιρετικό ως προς την εύρεσή του. Έτσι γίνεται αναζήτηση για μηδέν ή παραπάνω περιπτώσεις εμφάνισης
|
||||
του προηγούμενου από το ερωτηματικό χαρακτήρα. Για παράδειγμα, η κανονική έκφραση `[T]?he` αναπαριστά:
|
||||
το προαιρετικό κεφαλαίο `T`, που ακολουθείται από πεζό `h`, που ακολουθείται από
|
||||
πεζό `e`.
|
||||
|
||||
<pre>
|
||||
"[T]he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in the garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/cIg9zm/1)
|
||||
|
||||
<pre>
|
||||
"[T]?he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in t<a href="#learn-regex"><strong>he</strong></a> garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/kPpO2x/1)
|
||||
|
||||
## 2.4 Αγκύλες
|
||||
|
||||
Οι αγκύλες στις κανονικές εκφράσεις ονομάζονται αλλιώς και "ποσοτικοποιητές" αφού
|
||||
χρησιμοποιούνται για την εύρεση όλων επαναλήψεων ενός χαρακτήρα ή μιας
|
||||
ομάδας χαρακτήρων μέσα σ'ένα κείμενο. Για παράδειγμα, η κανονική έκφραση `[0-9]{2,3}` αναπαριστά: την
|
||||
αναζήτηση τουλάχιστον 2 ψηφίων το ένα μετά το άλλο αλλά όχι παραπάνω από 3 (στους χαρακτήρες από το 0 ως το 9).
|
||||
|
||||
<pre>
|
||||
"[0-9]{2,3}" => The number was 9.<a href="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/juM86s/1)
|
||||
|
||||
Μπορούμε να παραλείψουμε τον δεύτερο αριθμό. Για παράδειγμα, η κανονική έκφραση
|
||||
`[0-9]{2,}` αναπαριστά: την αναζήτηση 2 ή περισσότερων ψηφίων το ένα μετά το άλλο. Αν αφαιρέσουμε και
|
||||
την κόμμα, τότε η κανονική έκφραση `[0-9]{3}` αναπαριστά: την σύγκριση ακριβώς 3 ψηφίων.
|
||||
|
||||
<pre>
|
||||
"[0-9]{2,}" => The number was 9.<a href="#learn-regex"><strong>9997</strong></a> but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/Gdy4w5/1)
|
||||
|
||||
<pre>
|
||||
"[0-9]{3}" => The number was 9.<a href="#learn-regex"><strong>999</strong></a>7 but we rounded it off to 10.0.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/Sivu30/1)
|
||||
|
||||
## 2.5 Ομάδα Χαρακτήρων
|
||||
|
||||
Μια ομάδα χαρακτήρων είναι μια ομάδα υπό-μοτίβων που γράφονται μέσα σε παρενθέσεις `(...)`.
|
||||
Όπως είπαμε και προηγουμένως, σε μια κανονική έκφραση, αν τοποθετήσουμε έναν ποσοτικοποιητή μετά από έναν
|
||||
χαρακτήρα, τότε αυτός ο χαρακτήρας θα βρεθεί όσες φορές και αν υπάρχει μέσα στο κείμενο στο οποίο
|
||||
εκτελείται η αναζήτηση. Παρομοίως, αν τον βάλουμε μετά από μια ομάδα χαρακτήρων. Για παράδειγμα,
|
||||
η κανονική έκφραση `(ab)*` ταιριάζει με μηδέν ή παραπάνω επαναλήψεις του χαρακτήρα
|
||||
"ab". Ακόμη, μπορούμε να χρησιμοποιήσουμε τον μεταχαρακτήρα εναλλαγής `|` μέσα σε μια ομάδα χαρακτήρων.
|
||||
Για παράδειγμα, η κανονική έκφραση `(c|g|p)ar` αναπαριστά: τους πεζούς χαρακτήρες `c`,
|
||||
`g` ή `p`, που ακολουθούνται από τον χαρακτήρα `a`, που ακολουθείται από τον χαρακτήρα `r`.
|
||||
|
||||
<pre>
|
||||
"(c|g|p)ar" => The <a href="#learn-regex"><strong>car</strong></a> is <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/tUxrBG/1)
|
||||
|
||||
## 2.6 Εναλλαγή
|
||||
|
||||
Στις κανονικές εκφράσεις, η κάθετη γραμμή `|`, ορίζει μια εναλλαγή.
|
||||
Έτσι δηλαδή γίνεται μια επιλογή μεταξύ πολλαπλών εκφράσεων. Ίσως σκέφτεστε ότι
|
||||
η εναλλαγή και τα σύνολα , λειτουργούν με τον ίδιο τρόπο. Αλλά η μεγάλη διαφορά τους
|
||||
είναι ότι τα σύνολα χαρακτήρων δουλεύουν με χαρακτήρες ενώ η εναλλαγή με εκφράσεις.
|
||||
Για παράδειγμα, η κανονική έκφραση `(T|t)he|car` αναπαριστά: τον κεφαλαίο χαρακτήρα `T`
|
||||
ή τον πεζό χαρακτήρα `t`, που ακολουθείται από πεζό χαρακτήρα `h`, που ακολουθείται από
|
||||
πεζό χαρακτήρα `e` ή πεζό χαρακτήρα `c`, που ακολουθείται από πεζό χαρακτήρα `a`, που
|
||||
ακολουθείται από πεζό χαρακτήρα `r`.
|
||||
|
||||
<pre>
|
||||
"(T|t)he|car" => <a href="#learn-regex"><strong>The</strong></a> <a href="#learn-regex"><strong>car</strong></a> is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/fBXyX0/1)
|
||||
|
||||
## 2.7 Ειδικός Χαρακτήρας Διαφυγής
|
||||
|
||||
Το σύμβολο `\` χρησιμοποιείται στις κανονικές εκφράσεις ώστε να αγνοηθεί η ειδική σημασία
|
||||
που μπορεί να έχει ο χαρακτήρας που βρίσκεται μετά από αυτό. Αυτό μας επιτρέπει να αναζητήσουμε ένα
|
||||
σύμβολο, συμπεριλαμβανομένων των ειδικών χαρακτήρων `{ } [ ] / \ + * . $ ^ | ?`. Άρα για αναζήτηση
|
||||
ειδικών χαρακτήρων, τοποθετούμε ακριβώς πριν το σύμβολο `\`.
|
||||
|
||||
Για παράδειγμα, η κανονική έκφραση `.` χρησιμοποιείται για αναζήτηση οποιουδήποτε χαρακτήρα εκτός από
|
||||
αυτόν για την νέα γραμμή. Η παρακάτω κανονική έκφραση ψάχνει για το σύμβολο της τελείας `.` σε ένα string εισόδου. Η
|
||||
`(f|c|m)at\.?` αναπαριστά: ένα πεζό γράμμα `f`, `c` ή `m`, που ακολουθείται από τον πεζό τον
|
||||
χαρακτήρα `a`, που ακολουθείται από το πεζό γράμμα `t`, που ακολουθείται από τον προαιρετικό χαρακτήρα `.`.
|
||||
|
||||
<pre>
|
||||
"(f|c|m)at\.?" => The <a href="#learn-regex"><strong>fat</strong></a> <a href="#learn-regex"><strong>cat</strong></a> sat on the <a href="#learn-regex"><strong>mat.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/DOc5Nu/1)
|
||||
|
||||
## 2.8 Σύμβολα "Άγκυρες"
|
||||
|
||||
Σε μια κανονική έκφραση, χρησιμοποιούμε "άγκυρες" για να ελέγξουμε αν το σύμβολο που αναζητάμε είναι
|
||||
το πρώτο ή το τελευταίο σύμβολο ενός string. Οι άγκυρες είναι δύο τύπων:
|
||||
Πρώτα είναι το σύμβολο `^` που ελέγχει αν ο χαρακτήρας που ψάχνουμε είναι ο πρώτος
|
||||
χαρακτήρας της εισόδου και μετά είναι το σύμβολο του δολαρίου `$` που ελέγχει αν ο χαρακτήρας που
|
||||
ψάχνουμε είναι ο τελευταίος στο string εισόδου.
|
||||
|
||||
### 2.8.1 Το Σύμβολο ^
|
||||
|
||||
Το σύμβολο `^` χρησιμοποιείται για να ελέγξουμε αν ο χαρακτήρας που ψάχνουμε είναι ο πρώτος χαρακτήρας
|
||||
του string εισόδου. Αν δοκιμάσουμε την κανονική έκφραση `^a` (ψάχνουμε δηλαδή αν το a είναι το πρώτο
|
||||
σύμβολο) στο string εισόδου `abc`, τότε βλέπουμε ότι όντως το `a` είναι ο πρώτος χαρακτήρας. Αλλά
|
||||
αν δοκιμάσουμε την κανονική έκφραση `^b` στην παραπάνω είσοδο, τότε δεν θα πάρουμε κάποιο αποτέλεσμα.
|
||||
Αυτό συμβαίνει επειδή στην έκφραση `abc` το "b" δεν είναι ο πρώτος χαρακτήρας. Ας ρίξουμε μια ματιά
|
||||
στην κανονική έκφραση `^(T|t)he` η οποία ψάχνει για: έναν κεφαλαίο χαρακτήρα `T` ή έναν
|
||||
πεζό χαρακτήρα `t` που να είναι ο πρώτος χαρακτήρας της εισόδου και να ακολουθείται από
|
||||
έναν πεζό χαρακτήρα `h`, που ακολουθείται από έναν πεζό χαρακτήρα `e`.
|
||||
|
||||
<pre>
|
||||
"(T|t)he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/5ljjgB/1)
|
||||
|
||||
<pre>
|
||||
"^(T|t)he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in the garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/jXrKne/1)
|
||||
|
||||
### 2.8.2 Το Δολάριο
|
||||
|
||||
Το σύμβολο του δολαρίου `$` χρησιμοποιείται για να ελέγξουμε αν ο χαρακτήρας που αναζητάμε είναι ο τελευταίος
|
||||
χαρακτήρας του string εισόδου. Για παράδειγμα, η κανονική έκφραση `(at\.)$` αναπαριστά: έναν
|
||||
πεζό χαρακτήρα `a`, που ακολουθείται από έναν πεζό χαρακτήρα `t`, που ακολουθείται από μια τελεία `.`
|
||||
και όλα αυτά πρέπει να είναι οι τελευταίοι χαρακτήρες της εισόδου.
|
||||
|
||||
<pre>
|
||||
"(at\.)" => The fat c<a href="#learn-regex"><strong>at.</strong></a> s<a href="#learn-regex"><strong>at.</strong></a> on the m<a href="#learn-regex"><strong>at.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/y4Au4D/1)
|
||||
|
||||
<pre>
|
||||
"(at\.)$" => The fat cat. sat. on the m<a href="#learn-regex"><strong>at.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/t0AkOd/1)
|
||||
|
||||
## 3. Συντομογραφίες Συνόλων Χαρακτήρων
|
||||
|
||||
Οι κανονικές εκφράσεις χρησιμοποιούν κάποιες συντομογραφίες για τα σύνολα χαρακτήρων που
|
||||
χρησιμοποιούνται πιο συχνά και έτσι γίνονται πιο εύκολες και βολικές για τον χρήστη.
|
||||
Οι συντομογραφίες των συνόλων χαρακτήρων είναι οι παρακάτω:
|
||||
|
||||
|Συντομογραφία|Περιγραφή|
|
||||
|:----:|----|
|
||||
|.|Αναζήτηση όλων των χαρακτήρων εκτός από αυτόν για νέα γραμμή|
|
||||
|\w|Αναζήτηση αλφαριθμητικών χαρακτήρων: `[a-zA-Z0-9_]`|
|
||||
|\W|Αναζήτηση μη αλφαριθμητικών χαρακτήρων: `[^\w]`|
|
||||
|\d|Αναζήτηση στα ψηφία: `[0-9]`|
|
||||
|\D|Αναζήτηση χαρακτήρων που δεν είναι αριθμοί: `[^\d]`|
|
||||
|\s|Αναζήτηση του χαρακτήρα του κενού: `[\t\n\f\r\p{Z}]`|
|
||||
|\S|Αναζήτηση χαρακτήρων που δεν είναι το κενό: `[^\s]`|
|
||||
|
||||
## 4. Αναζήτηση
|
||||
|
||||
Η προς τα μπροστά και προς τα πίσω αναζήτηση, είναι συγκεκριμένοι τύποι συνόλων που
|
||||
ονομάζονται ***non-capturing groups*** (Χρησιμοποιούνται για αναζήτηση κάποιου μοτίβου
|
||||
αλλά δεν συμπεριλαμβάνονται στην λίστα των χαρακτήρων που ψάχνουμε). Οι αναζητήσεις προς τα μπροστά, χρησιμοποιούνται
|
||||
όταν το μοτίβο έχει πριν ή μετά ένα ακόμη μοτίβο. Για παράδειγμα, αν θέλουμε να βρούμε όλους
|
||||
τους αριθμούς που βρίσκονται μετά τον χαρακτήρα `$` στο παρακάτω string
|
||||
`$4.44 and $10.88`, τότε θα χρησιμοποιήσουμε την κανονική έκφραση `(?<=\$)[0-9\.]*`
|
||||
η οποία: βρίσκει όλους τους αριθμούς που βρίσκονται μετά από το σύμβολο`$` και περιέχουν τον χαρακτήρα `.` .
|
||||
Παρακάτω μπορείτε να δείτε τους τύπους αναζήτησης στις κανονικές εκφράσεις:
|
||||
|
||||
|Σύμβολο|Περιγραφή|
|
||||
|:----:|----|
|
||||
|?=|Θετική Αναζήτηση προς τα Μπροστά|
|
||||
|?!|Αρνητική Αναζήτηση προς τα Μπροστά|
|
||||
|?<=|Θετική Αναζήτηση προς τα Πίσω|
|
||||
|?<!|Αρνητική Αναζήτηση προς τα Πίσω|
|
||||
|
||||
### 4.1 Θετική Αναζήτηση προς τα Μπροστά
|
||||
|
||||
Η θετική αναζήτηση προς τα μπροστά, εγγυάται ότι το πρώτο μέρος της έκφρασης θα
|
||||
ακολουθείται από την ανάλογη έκφραση για προς τα μπροστά αναζήτηση. Το αποτέλεσμα
|
||||
περιλαμβάνει μόνο το κείμενο που ταιριάζει στο πρώτο κομμάτι της έκφρασης. Για να ορίσουμε
|
||||
μια τέτοια αναζήτηση, χρησιμοποιούμε παρενθέσεις. Μέσα σε αυτές, τοποθετούμε ένα ερωτηματικό
|
||||
και ένα ίσον όπως παρακάτω: `(?=...)`. Η έκφραση για προς τα μπροστά αναζήτηση, γράφεται μετά
|
||||
το σύμβολο του ίσον μέσα στις παρενθέσεις. Για παράδειγμα, η κανονική έκφραση
|
||||
`(T|t)he(?=\sfat)` αναπαριστά: είτε το πεζό γράμμα `t` είτε το κεφαλαίο γράμμα
|
||||
`T`, που ακολουθείται από το γράμμα `h`, που με την σειρά του ακολουθείται από το γράμμα `e`. Μέσα στις
|
||||
παρενθέσεις, ορίζουμε την θετική προς τα μπροστά αναζήτηση, η οποία λέει στον μηχανισμό αναζήτησης
|
||||
της κανονικής έκφρασης να βρει τα `The` ή τα `the` που ακολουθούνται από την λέξη `fat`.
|
||||
|
||||
<pre>
|
||||
"(T|t)he(?=\sfat)" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/IDDARt/1)
|
||||
|
||||
### 4.2 Αρνητική Αναζήτηση προς τα Μπροστά
|
||||
|
||||
Η αρνητική αναζήτηση προς τα μπροστά, χρησιμοποιείται όταν θέλουμε όλες τις εκφράσεις που
|
||||
ταιριάζουν με το μοτίβο που αναζητάμε, που όμως δεν ακολουθούνται από κάποιο άλλο μοτίβο.
|
||||
Αυτή η αναζήτηση ορίζεται όπως και η παραπάνω αλλά αντί για το σύμβολο `=` χρησιμοποιούμε το `!`,
|
||||
με αυτό τον τρόπο: `(?!...)`. Ας δούμε την κανονική έκφραση `(T|t)he(?!\sfat)` η οποία: επιστρέφει
|
||||
όλα τα `The` ή `the` που υπάρχουν στο string εισόδου και δεν ακολουθούνται από την λέξη `fat`
|
||||
μετά από κενό.
|
||||
|
||||
<pre>
|
||||
"(T|t)he(?!\sfat)" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/V32Npg/1)
|
||||
|
||||
### 4.3 Θετική Αναζήτηση προς τα Πίσω
|
||||
|
||||
Η θετική αναζήτηση προς τα πίσω, χρησιμοποιείται όταν θέλουμε να βρούμε όλες τις εκφράσεις που
|
||||
ταιριάζουν με ένα μοτίβο (που ορίζουμε εμείς) που βρίσκεται πριν από αυτές. Αυτή η αναζήτηση χρησιμοποιεί τα
|
||||
σύμβολα `(?<=...)`. Για παράδειγμα, η κανονική έκφραση `(?<=(T|t)he\s)(fat|mat)`:
|
||||
επιστρέφει όλες τις λέξεις `fat` ή `mat` που βρίσκονται μετά την λέξη `The` ή `the`.
|
||||
|
||||
<pre>
|
||||
"(?<=(T|t)he\s)(fat|mat)" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the <a href="#learn-regex"><strong>mat</strong></a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/avH165/1)
|
||||
|
||||
### 4.4 Αρνητική Αναζήτηση προς τα Πίσω
|
||||
|
||||
Η αρνητική αναζήτηση προς τα πίσω χρησιμοποιείται όταν θέλουμε να βρούμε όλες τις εκφράσεις που
|
||||
ταιριάζουν με το μοτίβο αναζήτησης, χωρίς όμως να υπάρχει άλλο μοτίβο (που ορίζουμε εμείς) πριν από αυτές.
|
||||
Αυτή η αναζήτηση χρησιμοποιεί τα σύμβολα `(?<!...)`. Για παράδειγμα, η κανονική έκφραση
|
||||
`(?<!(T|t)he\s)(cat)`: επιστρέφει όλες τις λέξεις `cat` που δεν βρίσκονται μετά από την λέξη `The` ή `the`.
|
||||
|
||||
<pre>
|
||||
"(?<!(T|t)he\s)(cat)" => The cat sat on <a href="#learn-regex"><strong>cat</strong></a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/8Efx5G/1)
|
||||
|
||||
## 5. Σημαίες
|
||||
|
||||
Οι σημαίες καλούνται αλλιώς και τροποποιητές αφού επηρεάζουν τον τρόπο αναζήτησης των
|
||||
κανονικών εκφράσεων. Μπορούν να χρησιμοποιηθούν με οποιαδήποτε σειρά και σε οποιονδήποτε συνδυασμό
|
||||
συμβόλων και είναι αναπόσπαστο κομμάτι των RegExp.
|
||||
|
||||
|Σημαία|Περιγραφή|
|
||||
|:----:|----|
|
||||
|i|Αλλάζει την αναζήτηση ώστε να μην ενδιαφέρεται για τον αν τα γράμματα είναι πεζά ή κεφαλαία.|
|
||||
|g|Καθολική αναζήτηση: Ψάχνει ένα μοτίβο σε ολόκληρο το string εισόδου.|
|
||||
|m|Πολλαπλές γραμμές: Οι μεταχαρακτήρες άγκυρας λειτουργούν σε όλες τις γραμμές.|
|
||||
|
||||
### 5.1 Χωρίς Διάκριση Πεζών-Κεφαλαίων
|
||||
|
||||
Ο τροποποιητής `i` χρησιμοποιείται για αναζήτηση που δεν κάνει διακρίσεις μεταξύ πεζών
|
||||
και κεφαλαίων γραμμάτων. Για παράδειγμα, η κανονική έκφραση `/The/gi` αναπαριστά: ένα
|
||||
κεφαλαίο γράμμα `T`, που ακολουθείται από έναν πεζό χαρακτήρα `h`, που ακολουθείται από τον χαρακτήρα `e`.
|
||||
Στο τέλος της κανονικής έκφρασης υπάρχει η σημαία `i` η οποία λέει στην κανονική
|
||||
έκφραση να αγνοήσει το αν ένας χαρακτήρας είναι πεζός ή κεφαλαίος. Όπως βλέπετε υπάρχει και η
|
||||
σημαία `g` ώστε η αναζήτηση του μοτίβου να γίνει σε όλο το string εισόδου.
|
||||
|
||||
<pre>
|
||||
"The" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/dpQyf9/1)
|
||||
|
||||
<pre>
|
||||
"/The/gi" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/ahfiuh/1)
|
||||
|
||||
### 5.2 Καθολική Αναζήτηση
|
||||
|
||||
Ο τροποποιητής `g`χρησιμοποιείται για καθολική αναζήτηση (για να βρεθούν δηλαδή όλες οι
|
||||
περιπτώσεις που ταιριάζουν με το μοτίβο αναζήτησης και να μην σταματήσει στην πρώτη εύρεση). Για παράδειγμα, η
|
||||
κανονική έκφραση `/.(at)/g` αναπαριστά: οποιονδήποτε χαρακτήρα εκτός από αυτόν για
|
||||
νέα γραμμή, που ακολουθείται από τον πεζό χαρακτήρα `a`, που ακολουθείται από τον πεζό
|
||||
χαρακτήρα `t` και αφού στο τέλος της κανονικής έκφρασης υπάρχει η σημαία `g`,
|
||||
θα βρεθούν όλες οι περιπτώσεις που περιγράφονται από την παραπάνω κανονική έκφραση και όχι μόνο
|
||||
η πρώτη (που είναι η προκαθορισμένη συμπεριφορά όταν δεν υπάρχει η σημαία `g`).
|
||||
|
||||
<pre>
|
||||
"/.(at)/" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/jnk6gM/1)
|
||||
|
||||
<pre>
|
||||
"/.(at)/g" => The <a href="#learn-regex"><strong>fat</strong></a> <a href="#learn-regex"><strong>cat</strong></a> <a href="#learn-regex"><strong>sat</strong></a> on the <a href="#learn-regex"><strong>mat</strong></a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/dO1nef/1)
|
||||
|
||||
### 5.3 Πολλές Γραμμές
|
||||
|
||||
Ο τροποποιητής `m` χρησιμοποιείται για αναζήτηση σε πολλές γραμμές. Όπως είπαμε
|
||||
προηγουμένως, οι άγκυρες `(^, $)` χρησιμοποιούνται για να ελέγξουμε αν ένα μοτίβο
|
||||
βρίσκεται στην αρχή ή στο τέλος του string εισόδου. Αν θέλουμε οι άγκυρες αυτές να
|
||||
ισχύουν για κάθε γραμμή, τότε χρησιμοποιούμε την σημαία `m`. Για παράδειγμα, η
|
||||
κανονική έκφραση `/at(.)?$/gm` αναπαριστά: τον πεζό χαρακτήρα `a`, που ακολουθείται
|
||||
από τον πεζό χαρακτήρα `t` και προαιρετικά οτιδήποτε άλλο εκτός από τον χαρακτήρα για
|
||||
νέα γραμμή. Και αφού υπάρχει και η σημαία `m`, η κανονική έκφραση θα αναζητήσει
|
||||
το μοτίβο στο τέλος κάθε γραμμής του string.
|
||||
|
||||
<pre>
|
||||
"/.at(.)?$/" => The fat
|
||||
cat sat
|
||||
on the <a href="#learn-regex"><strong>mat.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/hoGMkP/1)
|
||||
|
||||
<pre>
|
||||
"/.at(.)?$/gm" => The <a href="#learn-regex"><strong>fat</strong></a>
|
||||
cat <a href="#learn-regex"><strong>sat</strong></a>
|
||||
on the <a href="#learn-regex"><strong>mat.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/E88WE2/1)
|
||||
|
||||
## Contribution
|
||||
|
||||
* Report issues
|
||||
* Open pull request with improvements
|
||||
* Spread the word
|
||||
* Reach out to me directly at ziishaned@gmail.com or [](https://twitter.com/ziishaned)
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
|
@ -12,6 +12,7 @@
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## 正規表現とは
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## 정규표현식이란 무엇인가?
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
* [中文版](README-cn.md)
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## O que é uma Expressão Regular?
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## Düzenli İfade Nedir?
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## What is Regular Expression?
|
||||
|
||||
@ -420,7 +421,7 @@ or `the` which are followed by the word `fat`.
|
||||
### 4.2 Negative Lookahead
|
||||
|
||||
Negative lookahead is used when we need to get all matches from input string
|
||||
that are not followed by a pattern. Negative lookahead defined same as we define
|
||||
that are not followed by a pattern. Negative lookahead is defined same as we define
|
||||
positive lookahead but the only difference is instead of equal `=` character we
|
||||
use negation `!` character i.e. `(?!...)`. Let's take a look at the following
|
||||
regular expression `(T|t)he(?!\sfat)` which means: get all `The` or `the` words
|
||||
|
Loading…
x
Reference in New Issue
Block a user