From f4c1d1e274cea921e04d87f8488a948d832c4cb9 Mon Sep 17 00:00:00 2001 From: GrayLand Date: Thu, 10 Aug 2017 16:19:24 +0800 Subject: [PATCH 001/156] 1-> Translated to Chinese. --- 01.png | Bin 0 -> 20284 bytes README-zh-simple.md | 488 ++++++++++++++++++++++++++++++++++++++++++++ README.md | 3 + 3 files changed, 491 insertions(+) create mode 100644 01.png create mode 100644 README-zh-simple.md diff --git a/01.png b/01.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1c9340772a1ab2237859ed4f2e45cfc6fa50cd GIT binary patch literal 20284 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 literal 0 HcmV?d00001 diff --git a/README-zh-simple.md b/README-zh-simple.md new file mode 100644 index 00000000..2ae80013 --- /dev/null +++ b/README-zh-simple.md @@ -0,0 +1,488 @@ +
+

+Learn Regex +


+ +## 什么是正则表达式? + +> 正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子. + + +一个正则表达式是在一个主体字符串中从左到右匹配字符串时的一种样式. +例如"Regular expression"是一个完整的句子, 但我们常使用缩写的术语"regex"或"regexp". +正则表达式可以用来替换文本中的字符串,验证形式,提取字符串等等. + +想象你正在写一个应用, 然后你想设定一个用户命名的规则, 让用户名包含字符,数字,下划线和连字符,以及限制字符的个数,好让名字看起来没那么丑. +我们使用以下正则表达式来验证一个用户名: + +

+

+Regular expression +

+ +以上的正则表达式可以接受 `john_doe`, `jo-hn_doe`, `john12_as`. +但不匹配`Jo`, 因为它包含了大写的字母而且太短了. + +目录 +================= + + * [1. 基本匹配](#1-基本匹配) + * [2. 元字符](#2-元字符) + * [2.1 点运算符 .](#21-点运算符-) + * [2.2 字符集](#22-字符集) + * [2.2.1 否定字符集](#221-否定字符集) + * [2.3 重复次数](#23-重复次数) + * [2.3.1 * 号](#231--号) + * [2.3.2 号](#232--号) + * [2.3.3 ? 号](#233--号) + * [2.4 {} 号](#24--号) + * [2.5 (...) 特征标群](#25--特征标群) + * [2.6 | 或运算符](#26--或运算符) + * [2.7 转码特殊字符](#27-转码特殊字符) + * [2.8 锚点](#28-锚点) + * [2.8.1 ^ 号](#281--号) + * [2.8.2 $ 号](#282--号) +* [3. 简写字符集](#3-简写字符集) +* [4. 前后关联约束(前后预查)](#4-前后关联约束前后预查) + * [4.1 ?=... 前置约束(存在)](#41--前置约束存在) + * [4.2 ?!... 前置约束-排除](#42--前置约束-排除) + * [4.3 ?<= ... 后置约束-存在](#43---后置约束-存在) + * [4.4 ?<!... 后置约束-排除](#44--后置约束-排除) +* [5. 标志](#5-标志) + * [5.1 忽略大小写 (Case Insensitive)](#51-忽略大小写-case-insensitive) + * [5.2 全局搜索 (Global search)](#52-全局搜索-global-search) + * [5.3 多行修饰符 (Multiline)](#53-多行修饰符-multiline) +* [额外补充](#额外补充) +* [贡献](#贡献) +* [许可证](#许可证) + +## 1. 基本匹配 + +正则表达式其实就是在执行搜索时的格式, 它由一些字母和数字组合而成. +例如: 一个正则表达式 `the`, 它表示一个规则: 由字母`t`开始,接着是`h`,再接着是`e`. + +
+"the" => The fat cat sat on the mat. 
+
+ +[在线练习](https://regex101.com/r/dmRygT/1) + +正则表达式`123`匹配字符串`123`. 它逐个字符的与输入的正则表达式做比较. + +正则表达式是大小写敏感的, 所以`The`不会匹配`the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/1paXsy/1) + +## 2. 元字符 + +正则表达式主要依赖于元字符. +元字符不代表他们本身的字面意思, 他们都有特殊的含义. 一些元字符写在方括号中的时候有一些特殊的意思. 以下是一些元字符的介绍: + +|元字符|描述| +|:----:|----| +|.|句号匹配任意单个字符除了换行符.| +|[ ]|字符种类. 匹配方括号内的任意字符.| +|[^ ]|否定的字符种类. 匹配除了方括号里的任意字符| +|*|匹配>=0个重复的在*号之前的字符.| +|+|匹配>1个重复的+号前的字符. +|?|标记?之前的字符为可选.| +|{n,m}|匹配num个中括号之前的字符 (n <= num <= m).| +|(xyz)|字符集, 匹配与 xyz 完全相等的字符串.| +|||或运算符,匹配符号前或后的字符.| +|\|转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ || +|^|从开始行开始匹配.| +|$|从末端开始匹配.| + +## 2.1 点运算符 `.` + +`.`是元字符中最简单的例子. +`.`匹配任意单个字符, 但不匹配换行符. +例如, 表达式`.ar`匹配一个任意字符后面跟着是`a`和`r`的字符串. + +
+".ar" => The car parked in the garage.
+
+ +[在线练习](https://regex101.com/r/xc9GkU/1) + +## 2.2 字符集 + +字符集也叫做字符类. +方括号用来指定一个字符集. +在方括号中使用连字符来指定字符集的范围. +在方括号中的字符集不关心顺序. +例如, 表达式`[Tt]he` 匹配 `the` 和 `The`. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[在线练习](https://regex101.com/r/2ITLQ4/1) + +方括号的句号就表示句号. +表达式 `ar[.]` 匹配 `ar.`字符串 + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[在线练习](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 否定字符集 + +一般来说 `^` 表示一个字符串的开头, 但它用在一个方括号的开头的时候, 它表示这个字符集是否定的. +例如, 表达式`[^c]ar` 匹配一个后面跟着`ar`的除了`c`的任意字符. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[在线练习](https://regex101.com/r/nNNlq3/1) + +## 2.3 重复次数 + +后面跟着元字符 `+`, `*` or `?` 的, 用来指定匹配子模式的次数. +这些元字符在不同的情况下有着不同的意思. + +### 2.3.1 `*` 号 + +`*`号匹配 在`*`之前的字符出现`大于等于0`次. +例如, 表达式 `a*` 匹配以0或更多个a开头的字符, 因为有0个这个条件, 其实也就匹配了所有的字符. 表达式`[a-z]*` 匹配一个行中所有以小写字母开头的字符串. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[在线练习](https://regex101.com/r/7m8me5/1) + +`*`字符和`.`字符搭配可以匹配所有的字符`.*`. +`*`和表示匹配空格的符号`\s`连起来用, 如表达式`\s*cat\s*`匹配0或更多个空格开头和0或更多个空格结尾的cat字符串. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[在线练习](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 `+` 号 + +`+`号匹配`+`号之前的字符出现 >=1 次个字符. +例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着任意个字符的字符串. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 `?` 号 + +在正则表达式中元字符 `?` 标记在符号前面的字符为可选, 即出现 0 或 1 次. +例如, 表达式 `[T]?he` 匹配字符串 `he` 和 `The`. + +
+"[T]he" => The car is parked in the garage.
+
+ +[在线练习](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[在线练习](https://regex101.com/r/kPpO2x/1) + +## 2.4 `{}` 号 + +在正则表达式中 `{}` 是一个量词, 常用来一个或一组字符可以重复出现的次数. +例如, 表达式 `[0-9]{2,3}` 匹配 2~3 位 0~9 的数字. + + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[在线练习](https://regex101.com/r/juM86s/1) + +我们可以省略第二个参数. +例如, `[0-9]{2,}` 匹配至少两位 0~9 的数字. + +如果逗号也省略掉则表示重复固定的次数. +例如, `[0-9]{3}` 匹配3位数字 + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[在线练习](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[在线练习](https://regex101.com/r/Sivu30/1) + +## 2.5 `(...)` 特征标群 + +特征标群是一组写在 `(...)` 中的子模式. 例如之前说的 `{}` 是用来表示前面一个字符出现指定次数. 但如果在 `{}` 前加入特征标群则表示整个标群内的字符重复 N 次. 例如, 表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`. + +我们还可以在 `()` 中用或字符 `|` 表示或. 例如, `(c|g|p)ar` 匹配 `car` 或 `gar` 或 `par`. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[在线练习](https://regex101.com/r/tUxrBG/1) + +## 2.6 `|` 或运算符 + +或运算符就表示或, 用作判断条件. + +例如 `(T|t)he|car` 匹配 `(T|t)he` 或 `car`. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[在线练习](https://regex101.com/r/fBXyX0/1) + +## 2.7 转码特殊字符 + +反斜线 `\` 在表达式中用于转码紧跟其后的字符. 用于指定 `{ } [ ] / \ + * . $ ^ | ?` 这些特殊字符. 如果想要匹配这些特殊字符则要在其前面加上反斜线 `\`. + +例如 `.` 是用来匹配除换行符外的所有字符的. 如果想要匹配句子中的 `.` 则要写成 `\.`. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/DOc5Nu/1) + +## 2.8 锚点 + +在正则表达式中, 想要匹配指定开头或结尾的字符串就要使用到锚点. `^` 指定开头, `$` 指定结尾. + +### 2.8.1 `^` 号 + +`^` 用来检查匹配的字符串是否在所匹配字符串的开头. + +例如, 在 `abc` 中使用表达式 `^a` 会得到结果 `a`. 但如果使用 `^b` 将匹配不到任何结果. 应为在字符串 `abc` 中并不是以 `b` 开头. + +例如, `^(T|t)he` 匹配以 `The` 或 `the` 开头的字符串. + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[在线练习](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[在线练习](https://regex101.com/r/jXrKne/1) + +### 2.8.2 `$` 号 + +同理于 `^` 号, `$` 号用来匹配字符是否是最后一个. + +例如, `(at\.)$` 匹配以 `at.` 结尾的字符串. + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[在线练习](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[在线练习](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. 前后关联约束(前后预查) + +前置约束和后置约束都属于**非捕获簇**(用于匹配不在匹配列表中的格式). +前置约束用于判断所匹配的格式是否在另一个确定的格式之后. + +例如, 我们想要获得所有跟在 `$` 符号后的数字, 我们可以使用正向向后约束 `(?<=\$)[0-9\.]*`. +这个表达式匹配 `$` 开头, 之后跟着 `0,1,2,3,4,5,6,7,8,9,.` 这些字符可以出现大于等于 0 次. + +前后关联约束如下: + +|符号|描述| +|:----:|----| +|?=|前置约束-存在| +|?!|前置约束-排除| +|?<=|后置约束-存在| +|? +"[T|t]he(?=\sfat)" => The fat cat sat on the mat. + + +[在线练习](https://regex101.com/r/IDDARt/1) + +### 4.2 `?!...` 前置约束-排除 + +前置约束-排除 `?!` 用于筛选所有匹配结果, 筛选条件为 其后不跟随着定义的格式 +`前置约束-排除` 定义和 `前置约束(存在)` 一样, 区别就是 `=` 替换成 `!` 也就是 `(?!...)`. + +表达式 `[T|t]he(?!\sfat)` 匹配 `The` 和 `the`, 且其后不跟着 `(空格)fat`. + +
+"[T|t]he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/V32Npg/1) + +### 4.3 `?<= ...` 后置约束-存在 + +后置约束-存在 记作`(?<=...)` 用于筛选所有匹配结果, 筛选条件为 其前跟随着定义的格式. +例如, 表达式 `(?<=[T|t]he\s)(fat|mat)` 匹配 `fat` 和 `mat`, 且其前跟着 `The` 或 `the`. + +
+"(?<=[T|t]he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/avH165/1) + +### 4.4 `? +"(?<![T|t]he\s)(cat)" => The cat sat on cat. + + +[在线练习](https://regex101.com/r/8Efx5G/1) + +## 5. 标志 + +标志也叫修饰语, 因为它可以用来修改表达式的搜索结果. +这些标志可以任意的组合使用, 它也是整个正则表达式的一部分. + +|标志|描述| +|:----:|----| +|i|忽略大小写.| +|g|全局搜索.| +|m|多行的: 锚点元字符 `^` `$` 工作范围在每行的起始.| + +### 5.1 忽略大小写 (Case Insensitive) + +修饰语 `i` 用于忽略大小写. +例如, 表达式 `/The/gi` 表示在全局搜索 `The`, 在后面的 `i` 将其条件修改为忽略大小写, 则变成搜索 `the` 和 `The`, `g` 表示全局搜索. + +
+"The" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/ahfiuh/1) + +### 5.2 全局搜索 (Global search) + +修饰符 `g` 常用语执行一个全局搜索匹配, 即(不仅仅返回第一个匹配的, 而是返回全部). +例如, 表达式 `/.(at)/g` 表示搜索 任意字符(除了换行) + `at`, 并返回全部结果. + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[在线练习](https://regex101.com/r/dO1nef/1) + +### 5.3 多行修饰符 (Multiline) + +多行修饰符 `m` 常用语执行一个多行匹配. + +像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 `m`. + +例如, 表达式 `/at(.)?$/gm` 表示在待检测字符串每行的末尾搜索 `at`后跟一个或多个 `.` 的字符串, 并返回全部结果. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[在线练习](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[在线练习](https://regex101.com/r/E88WE2/1) + +## 额外补充 + +* *正整数*: `^\d+$` +* *负整数*: `^-\d+$` +* *手机国家号*: `^+?[\d\s]{3,}$` +* *手机号*: `^+?[\d\s]+(?[\d\s]{10,}$` +* *整数*: `^-?\d+$` +* *用户名*: `^[\w\d_.]{4,16}$` +* *数字和英文字母*: `^[a-zA-Z0-9]*$` +* *数字和应为字母和空格*: `^[a-zA-Z0-9 ]*$` +* *密码*: `^(?=^.{6,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$` +* *邮箱*: `^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$` +* *IP4 地址*: `^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))*$` +* *纯小写字母*: `^([a-z])*$` +* *纯大写字母*: `^([A-Z])*$` +* *URL*: `^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$` +* *VISA 信用卡号*: `^(4[0-9]{12}(?:[0-9]{3})?)*$` +* *日期 (MM/DD/YYYY)*: `^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$` +* *日期 (YYYY/MM/DD)*: `^(19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])$` +* *MasterCard 信用卡号*: `^(5[1-5][0-9]{14})*$` + +## 贡献 + +* 报告问题 +* 开放合并请求 +* 传播此文档 +* 直接和我联系 ziishaned@gmail.com 或 [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## 许可证 + +MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com) diff --git a/README.md b/README.md index 1a9ba3db..84cfc679 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,9 @@ Learn Regex


+ +[中文版](README-zh-simple.md) + ## What is Regular Expression? > Regular expression is a group of characters or symbols which is used to find a specific pattern from a text. From 0487bd9566bf3e3a1e111193d200738de8d748d7 Mon Sep 17 00:00:00 2001 From: GrayLand Date: Fri, 1 Sep 2017 09:11:42 +0800 Subject: [PATCH 002/156] Resolve conflicts --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index f66ad1df..2fa1b744 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,6 @@ Learn Regex


-<<<<<<< HEAD - -[中文版](README-zh-simple.md) -======= ## Translations: * [English](README.md) @@ -15,12 +11,8 @@ * [Português do Brasil](README-pt_BR.md) * [中文版](README-cn.md) * [日本語](README-ja.md) -<<<<<<< HEAD ->>>>>>> zeeshanu/master -======= * [한국어](README-ko.md) * [Turkish](README-tr.md) ->>>>>>> zeeshanu/master ## What is Regular Expression? From 752221a5e0865f9e5787aabc5754702220c9aaf5 Mon Sep 17 00:00:00 2001 From: GrayLand Date: Fri, 1 Sep 2017 09:17:41 +0800 Subject: [PATCH 003/156] Corrected the diagram in README-cn.md --- README-cn.md | 2 +- 01.png => img/regexp-cn.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename 01.png => img/regexp-cn.png (100%) diff --git a/README-cn.md b/README-cn.md index 31c3d862..73ffe73f 100644 --- a/README-cn.md +++ b/README-cn.md @@ -27,7 +27,7 @@

- Regular expression + Regular expression

以上的正则表达式可以接受 `john_doe`, `jo-hn_doe`, `john12_as`. diff --git a/01.png b/img/regexp-cn.png similarity index 100% rename from 01.png rename to img/regexp-cn.png From 7b00db73fc8b0bdafcf129ab15428f7acb34d485 Mon Sep 17 00:00:00 2001 From: Caleb Mazalevskis Date: Wed, 18 Oct 2017 13:32:47 +0800 Subject: [PATCH 004/156] Patch. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sync language list (all translations). - Sync some punctuation (Chinese ",.:?" -> ",。:?" and Japanese "," -> "、"). - Sync some spacing (various translations). - One missing translation (Chinese). - (PR is NOT a complete audit or proofreading). --- README-cn.md | 233 ++++++++++++++++++++++++------------------------ README-es.md | 5 +- README-fr.md | 3 +- README-gr.md | 2 +- README-ja.md | 29 +++--- README-ko.md | 3 +- README-pt_BR.md | 3 +- README-tr.md | 15 ++-- README.md | 2 +- 9 files changed, 151 insertions(+), 144 deletions(-) diff --git a/README-cn.md b/README-cn.md index add4168c..de8d14f9 100644 --- a/README-cn.md +++ b/README-cn.md @@ -3,36 +3,37 @@ Learn Regex


-## 翻译: +## 翻译: * [English](README.md) * [Español](README-es.md) * [Français](README-fr.md) -* [中文版](README-cn.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". -正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等. +一个正则表达式是在一个主体字符串中从左到右匹配字符串时的一种样式。 +“Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。 +正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。 -想象你正在写一个应用, 然后你想设定一个用户命名的规则, 让用户名包含字符,数字,下划线和连字符,以及限制字符的个数,好让名字看起来没那么丑. -我们使用以下正则表达式来验证一个用户名: +想象你正在写一个应用,然后你想设定一个用户命名的规则,让用户名包含字符,数字,下划线和连字符,以及限制字符的个数,好让名字看起来没那么丑。 +我们使用以下正则表达式来验证一个用户名:

Regular expression

-以上的正则表达式可以接受 `john_doe`, `jo-hn_doe`, `john12_as`. -但不匹配`Jo`, 因为它包含了大写的字母而且太短了. +以上的正则表达式可以接受 `john_doe`、`jo-hn_doe`、`john12_as`。 +但不匹配`Jo`,因为它包含了大写的字母而且太短了。 目录 ================= @@ -69,8 +70,8 @@ ## 1. 基本匹配 -正则表达式其实就是在执行搜索时的格式, 它由一些字母和数字组合而成. -例如: 一个正则表达式 `the`, 它表示一个规则: 由字母`t`开始,接着是`h`,再接着是`e`. +正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成。 +例如:一个正则表达式 `the`,它表示一个规则:由字母`t`开始,接着是`h`,再接着是`e`。
 "the" => The fat cat sat on the mat.
@@ -78,9 +79,9 @@
 
 [在线练习](https://regex101.com/r/dmRygT/1)
 
-正则表达式`123`匹配字符串`123`. 它逐个字符的与输入的正则表达式做比较.
+正则表达式`123`匹配字符串`123`. 它逐个字符的与输入的正则表达式做比较。
 
-正则表达式是大小写敏感的, 所以`The`不会匹配`the`.
+正则表达式是大小写敏感的,所以`The`不会匹配`the`。
 
 
 "The" => The fat cat sat on the mat.
@@ -90,29 +91,29 @@
 
 ## 2. 元字符
 
-正则表达式主要依赖于元字符.
-元字符不代表他们本身的字面意思, 他们都有特殊的含义. 一些元字符写在方括号中的时候有一些特殊的意思. 以下是一些元字符的介绍:
+正则表达式主要依赖于元字符。
+元字符不代表他们本身的字面意思,他们都有特殊的含义。一些元字符写在方括号中的时候有一些特殊的意思. 以下是一些元字符的介绍:
 
 |元字符|描述|
 |:----:|----|
-|.|句号匹配任意单个字符除了换行符.|
-|[ ]|字符种类. 匹配方括号内的任意字符.|
-|[^ ]|否定的字符种类. 匹配除了方括号里的任意字符|
-|*|匹配>=0个重复的在*号之前的字符.|
-|+|匹配>=1个重复的+号前的字符.
-|?|标记?之前的字符为可选.|
-|{n,m}|匹配num个大括号之前的字符 (n <= num <= m).|
-|(xyz)|字符集, 匹配与 xyz 完全相等的字符串.|
-|||或运算符,匹配符号前或后的字符.|
-|\|转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ ||
-|^|从开始行开始匹配.|
-|$|从末端开始匹配.|
+|.|句号匹配任意单个字符除了换行符。|
+|[ ]|字符种类. 匹配方括号内的任意字符。|
+|[^ ]|否定的字符种类。匹配除了方括号里的任意字符。|
+|*|匹配>=0个重复的在*号之前的字符。|
+|+|匹配>=1个重复的+号前的字符。|
+|?|标记?之前的字符为可选。|
+|{n,m}|匹配num个大括号之前的字符 (n <= num <= m)。|
+|(xyz)|字符集,匹配与 xyz 完全相等的字符串。|
+|||或运算符,匹配符号前或后的字符。|
+|\|转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ ||
+|^|从开始行开始匹配。|
+|$|从末端开始匹配。|
 
 ## 2.1 点运算符 `.`
 
-`.`是元字符中最简单的例子.
-`.`匹配任意单个字符, 但不匹配换行符.
-例如, 表达式`.ar`匹配一个任意字符后面跟着是`a`和`r`的字符串.
+`.`是元字符中最简单的例子。
+`.`匹配任意单个字符,但不匹配换行符。
+例如,表达式`.ar`匹配一个任意字符后面跟着是`a`和`r`的字符串。
 
 
 ".ar" => The car parked in the garage.
@@ -122,11 +123,11 @@
 
 ## 2.2 字符集
 
-字符集也叫做字符类.
-方括号用来指定一个字符集.
-在方括号中使用连字符来指定字符集的范围.
-在方括号中的字符集不关心顺序.
-例如, 表达式`[Tt]he` 匹配 `the` 和 `The`.
+字符集也叫做字符类。
+方括号用来指定一个字符集。
+在方括号中使用连字符来指定字符集的范围。
+在方括号中的字符集不关心顺序。
+例如,表达式`[Tt]he` 匹配 `the` 和 `The`。
 
 
 "[Tt]he" => The car parked in the garage.
@@ -134,8 +135,8 @@
 
 [在线练习](https://regex101.com/r/2ITLQ4/1)
 
-方括号的句号就表示句号.
-表达式 `ar[.]` 匹配 `ar.`字符串
+方括号的句号就表示句号。
+表达式 `ar[.]` 匹配 `ar.`字符串。
 
 
 "ar[.]" => A garage is a good place to park a car.
@@ -145,8 +146,8 @@
 
 ### 2.2.1 否定字符集
 
-一般来说 `^` 表示一个字符串的开头, 但它用在一个方括号的开头的时候, 它表示这个字符集是否定的.
-例如, 表达式`[^c]ar` 匹配一个后面跟着`ar`的除了`c`的任意字符.
+一般来说 `^` 表示一个字符串的开头,但它用在一个方括号的开头的时候,它表示这个字符集是否定的。
+例如,表达式`[^c]ar` 匹配一个后面跟着`ar`的除了`c`的任意字符。
 
 
 "[^c]ar" => The car parked in the garage.
@@ -156,13 +157,13 @@
 
 ## 2.3 重复次数
 
-后面跟着元字符 `+`, `*` or `?` 的, 用来指定匹配子模式的次数.
-这些元字符在不同的情况下有着不同的意思.
+后面跟着元字符 `+`,`*`或`?`的,用来指定匹配子模式的次数。
+这些元字符在不同的情况下有着不同的意思。
 
 ### 2.3.1 `*` 号
 
-`*`号匹配 在`*`之前的字符出现`大于等于0`次.
-例如, 表达式 `a*` 匹配以0或更多个a开头的字符, 因为有0个这个条件, 其实也就匹配了所有的字符. 表达式`[a-z]*` 匹配一个行中所有以小写字母开头的字符串.
+`*`号匹配 在`*`之前的字符出现`大于等于0`次。
+例如,表达式 `a*` 匹配以0或更多个a开头的字符,因为有0个这个条件,其实也就匹配了所有的字符. 表达式`[a-z]*` 匹配一个行中所有以小写字母开头的字符串。
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -170,8 +171,8 @@
 
 [在线练习](https://regex101.com/r/7m8me5/1)
 
-`*`字符和`.`字符搭配可以匹配所有的字符`.*`.
-`*`和表示匹配空格的符号`\s`连起来用, 如表达式`\s*cat\s*`匹配0或更多个空格开头和0或更多个空格结尾的cat字符串.
+`*`字符和`.`字符搭配可以匹配所有的字符`.*`。
+`*`和表示匹配空格的符号`\s`连起来用,如表达式`\s*cat\s*`匹配0或更多个空格开头和0或更多个空格结尾的cat字符串。
 
 
 "\s*cat\s*" => The fat cat sat on the concatenation.
@@ -181,8 +182,8 @@
 
 ### 2.3.2 `+` 号
 
-`+`号匹配`+`号之前的字符出现 >=1 次.
-例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着任意个字符的字符串.
+`+`号匹配`+`号之前的字符出现 >=1 次。
+例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着任意个字符的字符串。
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -192,8 +193,8 @@
 
 ### 2.3.3 `?` 号
 
-在正则表达式中元字符 `?` 标记在符号前面的字符为可选, 即出现 0 或 1 次.
-例如, 表达式 `[T]?he` 匹配字符串 `he` 和 `The`.
+在正则表达式中元字符 `?` 标记在符号前面的字符为可选,即出现 `0` 或 `1` 次。
+例如,表达式 `[T]?he` 匹配字符串 `he` 和 `The`。
 
 
 "[T]he" => The car is parked in the garage.
@@ -209,8 +210,8 @@
 
 ## 2.4 `{}` 号
 
-在正则表达式中 `{}` 是一个量词, 常用来一个或一组字符可以重复出现的次数.
-例如,  表达式 `[0-9]{2,3}` 匹配最少 2 位最多 3 位 0~9 的数字.
+在正则表达式中 `{}` 是一个量词,常用来一个或一组字符可以重复出现的次数。
+例如,表达式 `[0-9]{2,3}` 匹配最少 2 位最多 3 位 0~9 的数字。
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -218,11 +219,11 @@
 
 [在线练习](https://regex101.com/r/juM86s/1)
 
-我们可以省略第二个参数.
-例如, `[0-9]{2,}` 匹配至少两位 0~9 的数字.
+我们可以省略第二个参数。
+例如, `[0-9]{2,}` 匹配至少两位 0~9 的数字。
 
-如果逗号也省略掉则表示重复固定的次数.
-例如, `[0-9]{3}` 匹配3位数字
+如果逗号也省略掉则表示重复固定的次数。
+例如, `[0-9]{3}` 匹配3位数字。
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -238,9 +239,9 @@
 
 ## 2.5 `(...)` 特征标群
 
-特征标群是一组写在 `(...)` 中的子模式. 例如之前说的 `{}` 是用来表示前面一个字符出现指定次数. 但如果在 `{}` 前加入特征标群则表示整个标群内的字符重复 N 次. 例如, 表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`.
+特征标群是一组写在 `(...)` 中的子模式. 例如之前说的 `{}` 是用来表示前面一个字符出现指定次数. 但如果在 `{}` 前加入特征标群则表示整个标群内的字符重复 N 次. 例如,表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`。
 
-我们还可以在 `()` 中用或字符 `|` 表示或. 例如, `(c|g|p)ar` 匹配 `car` 或 `gar` 或 `par`.
+我们还可以在 `()` 中用或字符 `|` 表示或。 例如, `(c|g|p)ar` 匹配 `car` 或 `gar` 或 `par`。
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -250,9 +251,9 @@
 
 ## 2.6 `|` 或运算符
 
-或运算符就表示或, 用作判断条件.
+或运算符就表示或,用作判断条件。
 
-例如 `(T|t)he|car` 匹配 `(T|t)he` 或 `car`.
+例如 `(T|t)he|car` 匹配 `(T|t)he` 或 `car`。
 
 
 "(T|t)he|car" => The car is parked in the garage.
@@ -262,9 +263,9 @@
 
 ## 2.7 转码特殊字符
 
-反斜线 `\` 在表达式中用于转码紧跟其后的字符. 用于指定 `{ } [ ] / \ + * . $ ^ | ?` 这些特殊字符. 如果想要匹配这些特殊字符则要在其前面加上反斜线 `\`.
+反斜线 `\` 在表达式中用于转码紧跟其后的字符。用于指定 `{ } [ ] / \ + * . $ ^ | ?` 这些特殊字符. 如果想要匹配这些特殊字符则要在其前面加上反斜线 `\`。
 
-例如 `.` 是用来匹配除换行符外的所有字符的. 如果想要匹配句子中的 `.` 则要写成 `\.` 以下这个例子 `\.?`是选择性匹配`.`
+例如 `.` 是用来匹配除换行符外的所有字符的。如果想要匹配句子中的 `.` 则要写成 `\.` 以下这个例子 `\.?`是选择性匹配`.`。
 
 
 "(f|c|m)at\.?" => The fat cat sat on the mat.
@@ -274,15 +275,15 @@
 
 ## 2.8 锚点
 
-在正则表达式中, 想要匹配指定开头或结尾的字符串就要使用到锚点. `^` 指定开头, `$` 指定结尾.
+在正则表达式中,想要匹配指定开头或结尾的字符串就要使用到锚点。 `^` 指定开头, `$` 指定结尾。
 
 ### 2.8.1 `^` 号
 
-`^` 用来检查匹配的字符串是否在所匹配字符串的开头.
+`^` 用来检查匹配的字符串是否在所匹配字符串的开头。
 
-例如, 在 `abc` 中使用表达式 `^a` 会得到结果 `a`. 但如果使用 `^b` 将匹配不到任何结果. 因为在字符串 `abc` 中并不是以 `b` 开头.
+例如,在 `abc` 中使用表达式 `^a` 会得到结果 `a`. 但如果使用 `^b` 将匹配不到任何结果. 因为在字符串 `abc` 中并不是以 `b` 开头。
 
-例如, `^(T|t)he` 匹配以 `The` 或 `the` 开头的字符串.
+例如, `^(T|t)he` 匹配以 `The` 或 `the` 开头的字符串。
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -298,9 +299,9 @@
 
 ### 2.8.2 `$` 号
 
-同理于 `^` 号, `$` 号用来匹配字符是否是最后一个.
+同理于 `^` 号, `$` 号用来匹配字符是否是最后一个。
 
-例如, `(at\.)$` 匹配以 `at.` 结尾的字符串.
+例如, `(at\.)$` 匹配以 `at.` 结尾的字符串。
 
 
 "(at\.)" => The fat cat. sat. on the mat.
@@ -316,50 +317,50 @@
 
 ##  3. 简写字符集
 
-正则表达式提供一些常用的字符集简写. 如下:
+正则表达式提供一些常用的字符集简写. 如下:
 
 |简写|描述|
 |:----:|----|
-|.|除换行符外的所有字符|
-|\w|匹配所有字母数字, 等同于 `[a-zA-Z0-9_]`|
-|\W|匹配所有非字母数字, 即符号, 等同于: `[^\w]`|
-|\d|匹配数字: `[0-9]`|
-|\D|匹配非数字: `[^\d]`|
-|\s|匹配所有空格字符, 等同于: `[\t\n\f\r\p{Z}]`|
-|\S|匹配所有非空格字符: `[^\s]`|
-|\f|匹配一个换页符|
-|\n|匹配一个换行符|
-|\r|匹配一个回车符|
-|\t|匹配一个制表符|
-|\v|匹配一个垂直制表符|
-|\p|匹配 CR/LF (等同于 `\r\n`),用来匹配 DOS 行终止符|
+|.|除换行符外的所有字符。|
+|\w|匹配所有字母数字,等同于 `[a-zA-Z0-9_]`。|
+|\W|匹配所有非字母数字,即符号,等同于: `[^\w]`。|
+|\d|匹配数字: `[0-9]`。|
+|\D|匹配非数字: `[^\d]`。|
+|\s|匹配所有空格字符,等同于: `[\t\n\f\r\p{Z}]`。|
+|\S|匹配所有非空格字符: `[^\s]`。|
+|\f|匹配一个换页符。|
+|\n|匹配一个换行符。|
+|\r|匹配一个回车符。|
+|\t|匹配一个制表符。|
+|\v|匹配一个垂直制表符。|
+|\p|匹配 CR/LF (等同于 `\r\n`),用来匹配 DOS 行终止符。|
 
 ## 4. 前后关联约束(前后预查)
 
-前置约束和后置约束都属于**非捕获簇**(用于匹配不在匹配列表中的格式).
-前置约束用于判断所匹配的格式是否在另一个确定的格式之后.
+前置约束和后置约束都属于**非捕获簇**(用于匹配不在匹配列表中的格式)。
+前置约束用于判断所匹配的格式是否在另一个确定的格式之后。
 
-例如, 我们想要获得所有跟在 `$` 符号后的数字, 我们可以使用正向向后约束 `(?<=\$)[0-9\.]*`.
-这个表达式匹配 `$` 开头, 之后跟着 `0,1,2,3,4,5,6,7,8,9,.` 这些字符可以出现大于等于 0 次.
+例如,我们想要获得所有跟在 `$` 符号后的数字,我们可以使用正向向后约束 `(?<=\$)[0-9\.]*`。
+这个表达式匹配 `$` 开头,之后跟着 `0,1,2,3,4,5,6,7,8,9,.` 这些字符可以出现大于等于 0 次。
 
-前后关联约束如下:
+前后关联约束如下:
 
 |符号|描述|
 |:----:|----|
-|?=|前置约束-存在|
-|?!|前置约束-排除|
-|?<=|后置约束-存在|
-|?
 "(T|t)he(?=\sfat)" => The fat cat sat on the mat.
@@ -369,10 +370,10 @@
 
 ### 4.2 `?!...` 前置约束-排除
 
-前置约束-排除 `?!` 用于筛选所有匹配结果, 筛选条件为 其后不跟随着定义的格式
-`前置约束-排除`  定义和 `前置约束(存在)` 一样, 区别就是 `=` 替换成 `!` 也就是 `(?!...)`.
+前置约束-排除 `?!` 用于筛选所有匹配结果,筛选条件为 其后不跟随着定义的格式。
+`前置约束-排除`  定义和 `前置约束(存在)` 一样,区别就是 `=` 替换成 `!` 也就是 `(?!...)`。
 
-表达式 `(T|t)he(?!\sfat)` 匹配 `The` 和 `the`, 且其后不跟着 `(空格)fat`.
+表达式 `(T|t)he(?!\sfat)` 匹配 `The` 和 `the`,且其后不跟着 `fat`。
 
 
 "(T|t)he(?!\sfat)" => The fat cat sat on the mat.
@@ -382,8 +383,8 @@
 
 ### 4.3 `?<= ...` 后置约束-存在
 
-后置约束-存在 记作`(?<=...)` 用于筛选所有匹配结果, 筛选条件为 其前跟随着定义的格式.
-例如, 表达式 `(?<=(T|t)he\s)(fat|mat)` 匹配 `fat` 和 `mat`, 且其前跟着 `The` 或 `the`.
+后置约束-存在 记作`(?<=...)` 用于筛选所有匹配结果,筛选条件为 其前跟随着定义的格式。
+例如,表达式 `(?<=(T|t)he\s)(fat|mat)` 匹配 `fat` 和 `mat`,且其前跟着 `The` 或 `the`。
 
 
 "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -393,8 +394,8 @@
 
 ### 4.4 `?
 "(?<!(T|t)he\s)(cat)" => The cat sat on cat.
@@ -404,19 +405,19 @@
 
 ## 5. 标志
 
-标志也叫修饰语, 因为它可以用来修改表达式的搜索结果.
-这些标志可以任意的组合使用, 它也是整个正则表达式的一部分.
+标志也叫修饰语,因为它可以用来修改表达式的搜索结果。
+这些标志可以任意的组合使用,它也是整个正则表达式的一部分。
 
 |标志|描述|
 |:----:|----|
-|i|忽略大小写.|
-|g|全局搜索.|
-|m|多行的: 锚点元字符 `^` `$` 工作范围在每行的起始.|
+|i|忽略大小写。|
+|g|全局搜索。|
+|m|多行的: 锚点元字符 `^` `$` 工作范围在每行的起始。|
 
 ### 5.1 忽略大小写 (Case Insensitive)
 
-修饰语 `i` 用于忽略大小写.
-例如, 表达式 `/The/gi` 表示在全局搜索 `The`, 在后面的 `i` 将其条件修改为忽略大小写, 则变成搜索 `the` 和 `The`, `g` 表示全局搜索.
+修饰语 `i` 用于忽略大小写。
+例如,表达式 `/The/gi` 表示在全局搜索 `The`,在后面的 `i` 将其条件修改为忽略大小写,则变成搜索 `the` 和 `The`, `g` 表示全局搜索。
 
 
 "The" => The fat cat sat on the mat.
@@ -432,8 +433,8 @@
 
 ### 5.2 全局搜索 (Global search)
 
-修饰符 `g` 常用语执行一个全局搜索匹配, 即(不仅仅返回第一个匹配的, 而是返回全部).
-例如, 表达式 `/.(at)/g` 表示搜索 任意字符(除了换行) + `at`, 并返回全部结果.
+修饰符 `g` 常用语执行一个全局搜索匹配,即(不仅仅返回第一个匹配的,而是返回全部)。
+例如,表达式 `/.(at)/g` 表示搜索 任意字符(除了换行) + `at`,并返回全部结果。
 
 
 "/.(at)/" => The fat cat sat on the mat.
@@ -449,11 +450,11 @@
 
 ### 5.3 多行修饰符 (Multiline)
 
-多行修饰符 `m` 常用语执行一个多行匹配.
+多行修饰符 `m` 常用语执行一个多行匹配。
 
-像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 `m`.
+像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾。但我们如果想要它在每行的开头和结尾生效,我们需要用到多行修饰符 `m`。
 
-例如, 表达式 `/at(.)?$/gm` 表示在待检测字符串每行的末尾搜索 `at`后跟一个或多个 `.` 的字符串, 并返回全部结果.
+例如,表达式 `/at(.)?$/gm` 表示在待检测字符串每行的末尾搜索 `at`后跟一个或多个 `.` 的字符串,并返回全部结果。
 
 
 "/.at(.)?$/" => The fat
diff --git a/README-es.md b/README-es.md
index 48d54da2..41ec2bdf 100644
--- a/README-es.md
+++ b/README-es.md
@@ -9,13 +9,14 @@
 * [Español](README-es.md)
 * [Français](README-fr.md)
 * [Português do Brasil](README-pt_BR.md)
-* [中文版](README-cn.md)
+* [中文(简体)版](README-cn.md)
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
 
 ## 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 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.
@@ -414,7 +415,7 @@ El modificador `g` se utiliza para realizar una coincidencia global
 Por ejemplo, la expresión regular `/.(At)/g` significa: cualquier carácter,
 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 
+regular, ahora encontrará todas las coincidencias de toda la cadena de entrada, no sólo la
 primera instancia (el cual es el comportamiento normal).
 
 
diff --git a/README-fr.md b/README-fr.md
index 6e7c65d6..8bd28b52 100644
--- a/README-fr.md
+++ b/README-fr.md
@@ -8,7 +8,8 @@
 * [English](README.md)
 * [Español](README-es.md)
 * [Français](README-fr.md)
-* [中文版](README-cn.md)
+* [Português do Brasil](README-pt_BR.md)
+* [中文(简体)版](README-cn.md)
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
diff --git a/README-gr.md b/README-gr.md
index 8fb7da26..1fed2295 100644
--- a/README-gr.md
+++ b/README-gr.md
@@ -9,7 +9,7 @@
 * [Español](README-es.md)
 * [Français](README-fr.md)
 * [Português do Brasil](README-pt_BR.md)
-* [中文版](README-cn.md)
+* [中文(简体)版](README-cn.md)
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
diff --git a/README-ja.md b/README-ja.md
index 126cde8a..aa3693fe 100644
--- a/README-ja.md
+++ b/README-ja.md
@@ -8,7 +8,8 @@
 * [English](README.md)
 * [Español](README-es.md)
 * [Français](README-fr.md)
-* [中文版](README-cn.md)
+* [Português do Brasil](README-pt_BR.md)
+* [中文(简体)版](README-cn.md)
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
@@ -33,7 +34,7 @@
   Regular expression
 

-この正規表現によって `john_doe, jo-hn_doe, john12_as` などは許容されることになります。 +この正規表現によって `john_doe`、`jo-hn_doe`、`john12_as` などは許容されることになります。 一方で `Jo` は大文字を含む上に短すぎるため許容されません。 ## 目次 @@ -129,7 +130,7 @@ 文字集合を指定するには角括弧でくくります。 文字の範囲を指定するにはハイフンを使用します。 角括弧内の文字の記述順はマッチングには関係ありません。 -例えば `[Tt]he` という正規表現は大文字 `T` または小文字 `t` の後に `h`, `e` が続く文字列を表します。 +例えば `[Tt]he` という正規表現は大文字 `T` または小文字 `t` の後に `h`、 `e` が続く文字列を表します。
 "[Tt]he" => The car parked in the garage.
@@ -151,7 +152,7 @@
 通常キャレットは文字列の開始を意味するメタ文字ですが、角括弧内で最初に使用されると
 文字集合を否定する意味を持つようになります。
 例えば `[^c]ar` という正規表現は `c` 以外の任意の文字列の後に
-`a`, `r` が続く文字列を表します。
+`a`、`r` が続く文字列を表します。
 
 
 "[^c]ar" => The car parked in the garage.
@@ -161,7 +162,7 @@
 
 ## 2.3 繰り返し
 
-`+`, `*`, `?` はパターンが何回続くのかを指定するためのメタ文字になります。
+`+`、 `*`、 `?` はパターンが何回続くのかを指定するためのメタ文字になります。
 これらのメタ文字は異なるシチュエーションで異なる振る舞いをします。
 
 ### 2.3.1 アスタリスク
@@ -181,7 +182,7 @@
 任意の文字列を表現できます。
 またスペースを表す `\s` と併用することで空白文字を表現できます。
 例えば `\s*cat\s*` という正規表現は 0 個以上のスペースの後に
-小文字の `c`, `a`, `t` が続き、その後に 0 個以上のスペースが続きます。
+小文字の `c`、 `a`、 `t` が続き、その後に 0 個以上のスペースが続きます。
 
 
 "\s*cat\s*" => The fat cat sat on the concatenation.
@@ -207,7 +208,7 @@
 正規表現におけるメタ文字 `?` は直前の文字がオプションであることを意味します。
 すなわち直前の文字が 0 個または 1 個現れることを意味します。
 例えば `[T]?he` という正規表現は大文字の `T` が 0 個または 1 個出現し、
-その後に小文字の `h`, `e` が続くことを意味します。
+その後に小文字の `h`、 `e` が続くことを意味します。
 
 
 "[T]he" => The car is parked in the garage.
@@ -258,7 +259,7 @@
 文字グループ全体が繰り返すことを意味します。
 例えば、 `(ab)*` という正規表現は "ab" という文字列の 0 個以上の繰り返しにマッチします。
 文字グループ内では選言 `|` も使用することができます。
-例えば、`(c|g|p)ar` という正規表現は小文字の `c`, `g`, `p` のいずれかの後に
+例えば、`(c|g|p)ar` という正規表現は小文字の `c`、 `g`、 `p` のいずれかの後に
 `a` が続き、さらに `r` が続くことを意味します。
 
 
@@ -289,7 +290,7 @@
 記号として指定できるようになります。
 例えば `.` という正規表現は改行を除く任意の文字として使用されますが、
 `(f|c|m)at\.?` という正規表現では `.` 自体にマッチします。
-この正規表現は小文字の `f`, `c` または `m` の後に小文字の `a`, `t` が続き、
+この正規表現は小文字の `f`、 `c` または `m` の後に小文字の `a`、 `t` が続き、
 さらに `.` が 0 個または 1 個続きます。
 
 
@@ -312,7 +313,7 @@
 しかし `^b` という正規表現は前の文字列に対してはどれにもマッチしません。
 "b" は `abc` という入力文字列の開始ではないからです。
 他の例を見てみます。`^(T|t)he` は大文字の `T` または小文字の `t` から始まる文字列で
-その後に小文字の `h`, `e` が続くことを意味します。
+その後に小文字の `h`、 `e` が続くことを意味します。
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -385,7 +386,7 @@
 肯定的な先読みを定義するには括弧を使用します。
 その括弧の中で疑問符と等号を合わせて `(?=...)` のようにします。
 先読みのパターンは括弧の中の等号の後に記述します。
-例えば `(T|t)he(?=\sfat)` という正規表現は小文字の `t` か大文字の `T` のどちらかの後に `h`, `e` が続きます。
+例えば `(T|t)he(?=\sfat)` という正規表現は小文字の `t` か大文字の `T` のどちらかの後に `h`、 `e` が続きます。
 括弧内で肯定的な先読みを定義していますが、これは `The` または `the` の後に
 `fat` が続くことを表しています。
 
@@ -448,7 +449,7 @@
 ### 5.1 大文字・小文字を区別しない
 
 修飾子 `i` は大文字・小文字を区別したくないときに使用します。
-例えば `/The/gi` という正規表現は大文字の `T` の後に小文字の `h`, `e` が続くという意味ですが、
+例えば `/The/gi` という正規表現は大文字の `T` の後に小文字の `h`、 `e` が続くという意味ですが、
 最後の `i` で大文字・小文字を区別しない設定にしています。
 文字列内の全マッチ列を検索したいのでフラグ `g` も渡しています。
 
@@ -469,7 +470,7 @@
 修飾子 `g` はグローバル検索(最初のマッチ列を検索する代わりに全マッチ列を検索する)を
 行うために使用します。
 例えば `/.(at)/g` という正規表現は、改行を除く任意の文字列の後に
-小文字の `a`, `t` が続きます。正規表現の最後にフラグ `g` を渡すことで、
+小文字の `a`、 `t` が続きます。正規表現の最後にフラグ `g` を渡すことで、
 最初のマッチだけではなく(これがデフォルトの動作です)、入力文字列内の全マッチ列を検索するようにしています。
 
 
@@ -489,7 +490,7 @@
 修飾子 `m` は複数行でマッチさせたいときに使用します。
 前述で `(^, $)` という入力文字列の開始と終了を示すためのアンカーについて説明しましたが、
 フラグ `m` は複数行でマッチさせるためのアンカーとして使用できます。
-例えば `/at(.)?$/gm` という正規表現は小文字の `a`, `t` に続き、改行を除く
+例えば `/at(.)?$/gm` という正規表現は小文字の `a`、 `t` に続き、改行を除く
 任意の文字が 0 個または 1 個続くという意味ですが、
 フラグ `m` を渡すことで入力文字列の各行でパターンを検索させることができます。
 
diff --git a/README-ko.md b/README-ko.md
index 7d0097ea..56d59b1b 100644
--- a/README-ko.md
+++ b/README-ko.md
@@ -8,7 +8,8 @@
 * [English](README.md)
 * [Español](README-es.md)
 * [Français](README-fr.md)
-* [中文版](README-cn.md)
+* [Português do Brasil](README-pt_BR.md)
+* [中文(简体)版](README-cn.md)
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
diff --git a/README-pt_BR.md b/README-pt_BR.md
index de90728d..9c57b17a 100644
--- a/README-pt_BR.md
+++ b/README-pt_BR.md
@@ -9,9 +9,10 @@
 * [Español](README-es.md)
 * [Français](README-fr.md)
 * [Português do Brasil](README-pt_BR.md)
-* [中文版](README-cn.md)
+* [中文(简体)版](README-cn.md)
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
+* [Turkish](README-tr.md)
 * [Greek](README-gr.md)
 
 ## O que é uma Expressão Regular?
diff --git a/README-tr.md b/README-tr.md
index 956e85ea..f066ba98 100644
--- a/README-tr.md
+++ b/README-tr.md
@@ -8,7 +8,8 @@
 * [English](README.md)
 * [Español](README-es.md)
 * [Français](README-fr.md)
-* [中文版](README-cn.md)
+* [Português do Brasil](README-pt_BR.md)
+* [中文(简体)版](README-cn.md)
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
@@ -113,7 +114,7 @@ Nokta `.` meta karakterin en basit örneğidir. `.` meta karakteri satır başla
 ## 2.2 Karakter Takımı
 
 Karakter takımları aryıca Karakter sınıfı olarak bilinir. Karakter takımlarını belirtmek için köşeli ayraçlar kullanılır.
-Karakterin aralığını belirtmek için bir karakter takımında tire kullanın. Köşeli parantezlerdeki karakter aralığının sıralaması önemli değildir. 
+Karakterin aralığını belirtmek için bir karakter takımında tire kullanın. Köşeli parantezlerdeki karakter aralığının sıralaması önemli değildir.
 
 Örneğin, `[Tt]he` düzenli ifadesinin anlamı: bir büyük `T` veya küçük `t` harflerinin ardından sırasıyla `h` ve `e` harfi gelir.
 
@@ -153,7 +154,7 @@ Genellikle, şapka `^` sembolü harf öbeğinin başlangıcını temsil eder, am
 
 `*` sembolü, kendinden önce girilen eşlemenin sıfır veya daha fazla tekrarıyla eşleşir. Ama bir karakter seti ya da sınıf sonrasına girildiğinde, tüm karakter setinin tekrarlarını bulur.
 
-`a*` düzenli ifadesinin anlamı: `a` karakterinin sıfır veya daha fazla tekrarı. 
+`a*` düzenli ifadesinin anlamı: `a` karakterinin sıfır veya daha fazla tekrarı.
 `[a-z]*` düzenli ifadesinin anlamı: bir satırdaki herhangi bir sayıdaki küçük harfler.
 
 
@@ -250,7 +251,7 @@ Ayrıca karakter grubu içinde `|` meta karakterini kullanabiliriz.
 
 ## 2.6 Değişim
 
-Düzenli ifadede dik çizgi alternasyon(değişim, dönüşüm) tanımlamak için kullanılır. Alternasyon birden fazla ifade arasındaki bir koşul gibidir. Şu an, karakter grubu ve alternasyonun aynı şekilde çalıştığını düşünüyor olabilirsiniz. Ama, Karakter grubu ve alternasyon arasındaki büyük fark karakter grubu karakter düzeyinde çalışır ama alternasyon ifade düzeyinde çalışır. 
+Düzenli ifadede dik çizgi alternasyon(değişim, dönüşüm) tanımlamak için kullanılır. Alternasyon birden fazla ifade arasındaki bir koşul gibidir. Şu an, karakter grubu ve alternasyonun aynı şekilde çalıştığını düşünüyor olabilirsiniz. Ama, Karakter grubu ve alternasyon arasındaki büyük fark karakter grubu karakter düzeyinde çalışır ama alternasyon ifade düzeyinde çalışır.
 
 Örneğin, `(T|t)he|car` düzenli ifadesinin anlamı: Büyük `T` ya da küçük `t` karakteri, ardından küçük `h` karakteri, ardından küçük `e` ya da `c` karakteri, ardından küçük `a`, ardından küçük `r` karakteri gelir.
 
@@ -264,7 +265,7 @@ Düzenli ifadede dik çizgi alternasyon(değişim, dönüşüm) tanımlamak içi
 
 `\` işareti sonraki karakteri hariç tutmak için kullanılır. Bu bir semboülü ayrılmış karakterlerde `{ } [ ] / \ + * . $ ^ | ?` dahil olmak üzere eşleşen bir karakter olarak belirtmemizi sağlar. Bir özel karakteri eşleşen bir karakter olarak kullanmak için önüne `\` işareti getirin.
 
-Örneğin, `.` düzenli ifadesi yeni satır hariç herhangi bir karakteri eşleştirmek için kullanılır. 
+Örneğin, `.` düzenli ifadesi yeni satır hariç herhangi bir karakteri eşleştirmek için kullanılır.
 Bir harf öbeği içinde nokta `.` karakterini yakalamak için `.` ayrılmış karakterini hariç tutmamız gerekir. Bunun için nokta önüne `\` işaretini koymamız gereklidir.
 
 `(f|c|m)at\.?` düzenli ifadesinin anlamı: küçük `f`, `c`ya da `m` harfi, ardından küçük `a` harfi, ardından küçük `t` harfi, ardından opsiyonel `.` karakteri gelir.
@@ -277,7 +278,7 @@ Bir harf öbeği içinde nokta `.` karakterini yakalamak için `.` ayrılmış k
 
 ## 2.8 Sabitleyiciler
 
-Düzenli ifadelerde, eşleşen sembolün girilen harf öbeğinin başlangıç sembolü veya bitiş sembolü olup olmadığını kontrol etmek için sabitleyicileri kullanırız. 
+Düzenli ifadelerde, eşleşen sembolün girilen harf öbeğinin başlangıç sembolü veya bitiş sembolü olup olmadığını kontrol etmek için sabitleyicileri kullanırız.
 Sabitleyiciler iki çeşittir: İlk çeşit eşleşen karakterin girişin ilk karakteri olup olmadığını kontrol eden şapka `^` karakteri, ve ikinci çeşit eşleşen karakterin girişin son karakteri olup olmadığını kontrol eden dolar `$` karakteridir.
 
 ### 2.8.1 Şapka İşareti
@@ -285,7 +286,7 @@ Sabitleyiciler iki çeşittir: İlk çeşit eşleşen karakterin girişin ilk ka
 Şapka `^` işareti eşleşen karakterin giriş harf öbeğinin ilk karakteri olup olmadığını kontrol etmek için kullanılır.
 Eğer `^a` düzenli ifadesini `abc` harf öbeğine uygularsak `a` ile eşleşir. Ama `^b` ifadesini uygularsak bir eşleşme bulamayız. Bunun nedeni `abc` harf öbeğinde `b` karakterinin başlangıç karakteri olmamasıdır.
 
-Bir başka örnek üzerinden ilerlersek, 
+Bir başka örnek üzerinden ilerlersek,
 
 `^(T|t)he` düzenli ifadesinin anlamı: büyük `T` ya da `t` karakteri giriş harf öbeğinin ilk karakteri olmak üzere, ardından küçük `h`, ardından küçük `e` karakteri gelir.
 
diff --git a/README.md b/README.md
index 4e1a6f32..e35e3ff9 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
 * [Español](README-es.md)
 * [Français](README-fr.md)
 * [Português do Brasil](README-pt_BR.md)
-* [中文版](README-cn.md)
+* [中文(简体)版](README-cn.md)
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)

From f4d7416fd55b79e39e9dc4871c4058644f471db8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Munk=C3=A1csi=20M=C3=A1rk?= 
Date: Tue, 24 Oct 2017 22:57:59 +0200
Subject: [PATCH 005/156] hungarian file +links added

---
 README-cn.md    | 1 +
 README-es.md    | 1 +
 README-fr.md    | 1 +
 README-gr.md    | 1 +
 README-hu.md    | 0
 README-ja.md    | 1 +
 README-ko.md    | 1 +
 README-pt_BR.md | 1 +
 README-tr.md    | 1 +
 README.md       | 1 +
 10 files changed, 9 insertions(+)
 create mode 100644 README-hu.md

diff --git a/README-cn.md b/README-cn.md
index add4168c..a59cb5d5 100644
--- a/README-cn.md
+++ b/README-cn.md
@@ -13,6 +13,7 @@
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## 什么是正则表达式?
 
diff --git a/README-es.md b/README-es.md
index 48d54da2..16d3ab01 100644
--- a/README-es.md
+++ b/README-es.md
@@ -14,6 +14,7 @@
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## 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.
diff --git a/README-fr.md b/README-fr.md
index 6e7c65d6..c788cac5 100644
--- a/README-fr.md
+++ b/README-fr.md
@@ -13,6 +13,7 @@
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## Qu'est-ce qu'une expression régulière?
 
diff --git a/README-gr.md b/README-gr.md
index 8fb7da26..59f9112d 100644
--- a/README-gr.md
+++ b/README-gr.md
@@ -14,6 +14,7 @@
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## Τι είναι μια Κανονική Έκφραση (Regular Expression);
 
diff --git a/README-hu.md b/README-hu.md
new file mode 100644
index 00000000..e69de29b
diff --git a/README-ja.md b/README-ja.md
index 126cde8a..bdcaaa0e 100644
--- a/README-ja.md
+++ b/README-ja.md
@@ -13,6 +13,7 @@
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## 正規表現とは
 
diff --git a/README-ko.md b/README-ko.md
index 7d0097ea..795299a3 100644
--- a/README-ko.md
+++ b/README-ko.md
@@ -13,6 +13,7 @@
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## 정규표현식이란 무엇인가?
 
diff --git a/README-pt_BR.md b/README-pt_BR.md
index de90728d..aca692d1 100644
--- a/README-pt_BR.md
+++ b/README-pt_BR.md
@@ -13,6 +13,7 @@
 * [日本語](README-ja.md)
 * [한국어](README-ko.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## O que é uma Expressão Regular?
 
diff --git a/README-tr.md b/README-tr.md
index 956e85ea..9d32f1b4 100644
--- a/README-tr.md
+++ b/README-tr.md
@@ -13,6 +13,7 @@
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## Düzenli İfade Nedir?
 
diff --git a/README.md b/README.md
index 443973e3..74693e79 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,7 @@
 * [한국어](README-ko.md)
 * [Turkish](README-tr.md)
 * [Greek](README-gr.md)
+* [Magyar](README-hu.md)
 
 ## What is Regular Expression?
 

From b3789f2e40df944e8b74de70b029dd813d0f9f5f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Munk=C3=A1csi=20M=C3=A1rk?= 
Date: Tue, 24 Oct 2017 23:00:12 +0200
Subject: [PATCH 006/156] hungarian translation added for proofreading

---
 README-hu.md      | 877 ++++++++++++++++++++++++++++++++++++++++++++++
 img/regexp-hu.png | Bin 0 -> 35766 bytes
 2 files changed, 877 insertions(+)
 create mode 100644 img/regexp-hu.png

diff --git a/README-hu.md b/README-hu.md
index e69de29b..a0e08a2d 100644
--- a/README-hu.md
+++ b/README-hu.md
@@ -0,0 +1,877 @@
+
+

+Learn Regex +


+ +## Translations: +## Fordítások: + +* [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) +* [Magyar](README-hu.md) + +## What is Regular Expression? +## Mi az a reguláris kifejezés? + +> Regular expression is a group of characters or symbols which is used to find a specific pattern from a text. +> A reguláris kifejezés karakterek vagy szimbólumok egy csoportja, amelyet egy szövegből adott minták megtalálására használnak. + +A regular expression is a pattern that is matched against a subject string from +left to right. The word "Regular expression" is a mouthful, you will usually +find the term abbreviated as "regex" or "regexp". Regular expression is used for +replacing a text within a string, validating form, extract a substring from a +string based upon a pattern match, and so much more. + +A reguláris kifejezés egy olyan minta, amely illeszkedik egy adott karakterláncra +balról jobbra. Maga a "Regular expression" kifejezést általában rövidítve lehet +megtalálni, mint "regex" vagy "regexp". A reguláris kifejezést használják szövegrészek +lecserélésére egy szövegben, űrlapok validálására, szövegrészek kiválasztására +mintaegyezés alapján egy hosszabb szövegből és így tovább. + +Imagine you are writing an application and you want to set the rules for when a +user chooses their username. We want to allow the username to contain letters, +numbers, underscores and hyphens. We also want to limit the number of characters +in username so it does not look ugly. We use the following regular expression to +validate a username: + +Képzeld el, hogy egy alkalmazást írsz és szeretnél szabályokat állítani a felhasználónév +kiválasztásához. A felhasználónév csak betűket, számokat, aláhúzásjelet és kötőjelet +tartalmazhat. Szeretnénk limitálni a karakterek maximális számát is a felhasználónévben, +hogy ne legyen csúnya. A felhasználónév validálására a következő reguláris kifejezést +használjuk: + +

+

+ Regular expression + Regular expression +

+ +Above regular expression can accept the strings `john_doe`, `jo-hn_doe` and +`john12_as`. It does not match `Jo` because that string contains uppercase +letter and also it is too short. + +A feljebbi reguláris kifejezés elfogadja a `john_doe`, `jo-hn_doe` és a +`john12_as` karakterláncokat. Nem fog egyezni a `Jo`-ra mert ez nagybetűt +tartalmaz és túl rövid is. + +## Table of Contents +## Tartalomjegyzék + +- [Basic Matchers](#1-basic-matchers) +- [Meta character](#2-meta-characters) + - [Full stop](#21-full-stop) + - [Character set](#22-character-set) + - [Negated character set](#221-negated-character-set) + - [Repetitions](#23-repetitions) + - [The Star](#231-the-star) + - [The Plus](#232-the-plus) + - [The Question Mark](#233-the-question-mark) + - [Braces](#24-braces) + - [Character Group](#25-character-group) + - [Alternation](#26-alternation) + - [Escaping special character](#27-escaping-special-character) + - [Anchors](#28-anchors) + - [Caret](#281-caret) + - [Dollar](#282-dollar) +- [Shorthand Character Sets](#3-shorthand-character-sets) +- [Lookaround](#4-lookaround) + - [Positive Lookahead](#41-positive-lookahead) + - [Negative Lookahead](#42-negative-lookahead) + - [Positive Lookbehind](#43-positive-lookbehind) + - [Negative Lookbehind](#44-negative-lookbehind) +- [Flags](#5-flags) + - [Case Insensitive](#51-case-insensitive) + - [Global search](#52-global-search) + - [Multiline](#53-multiline) + +- [Bevezetés](#1-basic-matchers) +- [Meta karakterek](#2-meta-characters) + - [Full stop](#21-full-stop) + - [Karakter osztályok](#22-character-set) + - [Negált karakter osztályok](#221-negated-character-set) + - [Ismétlések](#23-repetitions) + - [A csillag](#231-the-star) + - [A plusz](#232-the-plus) + - [A kérdőjel](#233-the-question-mark) + - [A kapcsos zárójelek](#24-braces) + - [Karakter csoportok](#25-character-group) + - [Alternálás](#26-alternation) + - [Speciális karakter escape-elése](#27-escaping-special-character) + - [Horgonyok](#28-anchors) + - [Kalap](#281-caret) + - [Dollár](#282-dollar) +- [Shorthand Karakter osztályok](#3-shorthand-character-sets) +- [Lookaround](#4-lookaround) + - [Positive Lookahead](#41-positive-lookahead) + - [Negative Lookahead](#42-negative-lookahead) + - [Positive Lookbehind](#43-positive-lookbehind) + - [Negative Lookbehind](#44-negative-lookbehind) +- [Flag-ek](#5-flags) + - [Kis-nagybetű érzéketlen](#51-case-insensitive) + - [Globális keresés](#52-global-search) + - [Többsoros](#53-multiline) + +## 1. Basic Matchers +## 1. Bevezetés + +A regular expression is just a pattern of characters that we use to perform +search in a text. For example, the regular expression `the` means: the letter +`t`, followed by the letter `h`, followed by the letter `e`. + +A reguláris kifejezés egy karakterminta, amit keresésre használunk egy +szövegben. Például a `the` reguláris kifejezés a következőt jelenti: egy `t` betű, +amit `h` követ, amit egy `e` követ. + +
+"the" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dmRygT/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/dmRygT/1) + +The regular expression `123` matches the string `123`. The regular expression is +matched against an input string by comparing each character in the regular +expression to each character in the input string, one after another. Regular +expressions are normally case-sensitive so the regular expression `The` would +not match the string `the`. + +Az `123` reguláris kifejezés illeszkedik a `123` karakterláncra. A reguláris kifejezés +minden egyes karaktere össze lesz hasonlítva a bevitt karakterlánc minden elemével +egymás után. A reguláris kifejezések alap esetben kis-nagybetű érzékenyek, tehát a +`The` reguláris kifejezés nem fog illeszkedni a `the` karakterláncra. + +
+"The" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/1paXsy/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/1paXsy/1) + +## 2. Meta Characters +## 2. Meta karakterek + +Meta characters are the building blocks of the regular expressions. Meta +characters do not stand for themselves but instead are interpreted in some +special way. Some meta characters have a special meaning and are written inside +square brackets. The meta characters are as follows: + +A meta karakterek a reguláris kifejezések építőkockái. A meta karakterek speciális +módon értelmezendőek. Némelyik meta karakternek speciális jelentése van és +szögletes zárójelek közé vannak téve. A meta karakterek a következők: + +|Meta character|Description| +|:----:|----| +|.|Period matches any single character except a line break.| +|[ ]|Character class. Matches any character contained between the square brackets.| +|[^ ]|Negated character class. Matches any character that is not contained between the square brackets| +|*|Matches 0 or more repetitions of the preceding symbol.| +|+|Matches 1 or more repetitions of the preceding symbol.| +|?|Makes the preceding symbol optional.| +|{n,m}|Braces. Matches at least "n" but not more than "m" repetitions of the preceding symbol.| +|(xyz)|Character group. Matches the characters xyz in that exact order.| +|||Alternation. Matches either the characters before or the characters after the symbol.| +|\|Escapes the next character. This allows you to match reserved characters [ ] ( ) { } . * + ? ^ $ \ || +|^|Matches the beginning of the input.| +|$|Matches the end of the input.| + +|Meta karakter|Leírás| +|:----:|----| +|.|A pont illeszkedik minden egyes karakterre kivéve a sortörést.| +|[ ]|Karakter osztály. Minden karakterre illeszkedik ami a szögletes zárójelek közt van.| +|[^ ]|Negált karakter osztály. Minden karakterre illeszkedik ami nincs a szögletes zárójelek közt.| +|*|Illeszkedik az őt megelőző szimbólum 0 vagy több ismétlődésére.| +|+|Illeszkedik az őt megelőző szimbólum 1 vagy több ismétlődésére.| +|?|Opcionálissá teszi az őt megelőző szimbólumot.| +|{n,m}|Kapcsos zárójelek. Illeszkedik az őt megelőző szimbólum minimum "n" de nem több mint "m" ismétlődésére.| +|(xyz)|Karakter csoport. Illeszkedik az xyz karakterekre pontosan ilyen sorrendben.| +|||Alternáció. Illeszkedik a szimbólum előtt és után álló karakterekre is.| +|\|Escape-li a következő karaktert. A segítségével lefoglalt karakterekre is lehet illeszkedni [ ] ( ) { } . * + ? ^ $ \ || +|^|A bevitel elejére illeszkedik.| +|$|A bevitel végére illeszkedik.| + +## 2.1 Full stop +## 2.1 Full stop + +Full stop `.` is the simplest example of meta character. The meta character `.` +matches any single character. It will not match return or newline characters. +For example, the regular expression `.ar` means: any character, followed by the +letter `a`, followed by the letter `r`. + +A full stop `.` a legegyszerűbb meta karakter példa. A `.` meta karakter illeszkedik +minden egyes karakterre. Nem fog illeszkedni a kocsi vissza és a sortörés karakterekre. +Például a `.ar` reguláris kifejezés jelentése: minden karakter, amit `a` aztán `r` követ. + +
+".ar" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/xc9GkU/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/xc9GkU/1) + +## 2.2 Character set +## 2.2 Karakter osztályok + +Character sets are also called character class. Square brackets are used to +specify character sets. Use a hyphen inside a character set to specify the +characters' range. The order of the character range inside square brackets +doesn't matter. For example, the regular expression `[Tt]he` means: an uppercase +`T` or lowercase `t`, followed by the letter `h`, followed by the letter `e`. + +A szögletes zárójelekkel határozzuk meg a karakter osztályokat. A szögletes +zárójelek közt kötőjel karakterrel határozhatunk meg karakter tartományokat. +A karaktertartomány sorrendje nem számít. Például a `[Tt]he` reguláris kifejezés +jelentése: nagybetűs `T` vagy kisbetűs `t` amit egy `h` majd egy `e` betű követ. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/2ITLQ4/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/2ITLQ4/1) + +A period inside a character set, however, means a literal period. The regular +expression `ar[.]` means: a lowercase character `a`, followed by letter `r`, +followed by a period `.` character. + +Egy pont a karakter osztályon belül egyébként szó szerint pont-ot jelent. A +`ar[.]` reguláris kifejezés jelentése: kisbetűs `a` amit egy `r` aztán egy +pont `.` karakter követ. + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Test the regular expression](https://regex101.com/r/wL3xtE/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Negated character set +### 2.2.1 Negált karakter osztályok + +In general, the caret symbol represents the start of the string, but when it is +typed after the opening square bracket it negates the character set. For +example, the regular expression `[^c]ar` means: any character except `c`, +followed by the character `a`, followed by the letter `r`. + +Általában a kalap szimbólum egy karakterlánc elejét jelenti, de ha egy nyitó +szögletes zárójel után áll, akkor negálja a karakter osztályt. Például a +`[^c]ar` reguláris kifejezés jelentése: minden karakter a `c` kivételével +ami után `a` aztán egy `r` betű áll. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/nNNlq3/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/nNNlq3/1) + +## 2.3 Repetitions +## 2.3 Ismétlések + +Following meta characters `+`, `*` or `?` are used to specify how many times a +subpattern can occur. These meta characters act differently in different +situations. + +A következő meta karaktereket `+`, `*` vagy `?` arra használjuk, hogy meghatározzuk, +hányszor fordulhat elő az al-minta. Ezek a meta karakterek máshogy viselkednek +adott helyzetekben. + +### 2.3.1 The Star +### 2.3.1 A csillag + +The symbol `*` matches zero or more repetitions of the preceding matcher. The +regular expression `a*` means: zero or more repetitions of preceding lowercase +character `a`. But if it appears after a character set or class then it finds +the repetitions of the whole character set. For example, the regular expression +`[a-z]*` means: any number of lowercase letters in a row. + +A `*` szimbólum az őt megelőző karakter nulla vagy több ismétlődésére illeszkedik. +A `a*` reguláris kifejezés jelentése: nulla vagy több ismétlődése az őt megelőző `a` +karakternek. De ha egy karakter osztály után áll akkor az egész karakterosztály +ismétlődését keresi. Például, a `[a-z]*` reguláris kifejezés jelentése: bármennyi +kisbetűs betű egy sorban. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Test the regular expression](https://regex101.com/r/7m8me5/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/7m8me5/1) + +The `*` symbol can be used with the meta character `.` to match any string of +characters `.*`. The `*` symbol can be used with the whitespace character `\s` +to match a string of whitespace characters. For example, the expression +`\s*cat\s*` means: zero or more spaces, followed by lowercase character `c`, +followed by lowercase character `a`, followed by lowercase character `t`, +followed by zero or more spaces. + +A `*` szimbólum használható a `.` meta karakterrel `.*`, ez illeszkedik +bármilyen karakterláncra. A `*` szimbólum használható a whitespace karakterrel `\s` +együtt, hogy illeszkedjen egy whitespace-ekből álló karakterláncra. Például a +`\s*cat\s*`kifejezés jelentése: nulla vagy több szóköz, amit egy kisbetűs `c`, +aztán egy kisbetűs `a`, aztán egy kisbetűs `t`, amit még nulla vagy több szóköz követ. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Test the regular expression](https://regex101.com/r/gGrwuz/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 The Plus +### 2.3.2 A plusz + +The symbol `+` matches one or more repetitions of the preceding character. For +example, the regular expression `c.+t` means: lowercase letter `c`, followed by +at least one character, followed by the lowercase character `t`. It needs to be +clarified that `t` is the last `t` in the sentence. + +A `+` szimbólum illeszkedik az őt megelőző karakter egy vagy több ismétlődésére. +Például a `c.+t` kifejezés jelentése: kisbetűs `c` betű, amit legalább egy vagy +több `t` követ. Itt tisztázni kell hogy a `t` az utolsó `t` a mondatban. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/Dzf9Aa/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 The Question Mark +### 2.3.3 A kérdőjel + +In regular expression the meta character `?` makes the preceding character +optional. This symbol matches zero or one instance of the preceding character. +For example, the regular expression `[T]?he` means: Optional the uppercase +letter `T`, followed by the lowercase character `h`, followed by the lowercase +character `e`. + +A reguláris kifejezésben a `?` meta karakter opcionálissá teszi az őt +megelőző karaktert. Ez a szimbólum az őt megelőző karakter nulla vagy egy +példányára illeszkedik. Például a `[T]?he` kifejezés jelentése: opcionális a +nagybetűs `T`, amit egy kisbetűs `h`, majd egy kisbetűs `e` követ. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/cIg9zm/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/kPpO2x/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/kPpO2x/1) + +## 2.4 Braces +## 2.4 A kapcsos zárójelek + +In regular expression braces that are also called quantifiers are used to +specify the number of times that a character or a group of characters can be +repeated. For example, the regular expression `[0-9]{2,3}` means: Match at least +2 digits but not more than 3 ( characters in the range of 0 to 9). + +A reguláris kifejezésben a kapcsos zárójeleket annak meghatározására használjuk, +hogy egy karakter vagy egy karakter csoport hányszor ismétlődhet. Például a +`[0-9]{2,3}` kifejezés jelentése: minimum 2 de nem több mint 3 karakter a `[0-9]` +karaktertartományon belül. + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/juM86s/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/juM86s/1) + +We can leave out the second number. For example, the regular expression +`[0-9]{2,}` means: Match 2 or more digits. If we also remove the comma the +regular expression `[0-9]{3}` means: Match exactly 3 digits. + +Kihagyhatjuk a második számot. Például a `[0-9]{2,}` kifejezés jelentése: +2 vagy több számra illeszkedik. Ha a vesszőt is kitöröljük `[0-9]{3}`: Pontosan +3 számra illeszkedik. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Gdy4w5/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Sivu30/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/Sivu30/1) + +## 2.5 Character Group +## 2.5 Karakter csoportok + +Character group is a group of sub-patterns that is written inside Parentheses `(...)`. +As we discussed before that in regular expression if we put a quantifier after a +character then it will repeat the preceding character. But if we put quantifier +after a character group then it repeats the whole character group. For example, +the regular expression `(ab)*` matches zero or more repetitions of the character +"ab". We can also use the alternation `|` meta character inside character group. +For example, the regular expression `(c|g|p)ar` means: lowercase character `c`, +`g` or `p`, followed by character `a`, followed by character `r`. + +A karakter csoport al-minták csoportja amik zárójelek közé `(...)` vannak írva. +Ahogy előbb már megbeszéltük, ha egy karakter után ismétlő karaktert rakunk, az +ismételni fogja az előtte lévő karaktert. De ha egy ismétlő karaktert egy karakter +csoport után rakunk, az ismételni fogja az egész csoportot. Például a `(ab)*` +kifejezés illeszkedik nulla vagy több ismétlődésére az `ab` karaktereknek. +Használhatunk alternáló meta karaktert `|` is a csoporton belül. Például a `(c|g|p)ar` +kifejezés jelentése: kisbetűs `c`, `g` vagy `p` karakter, amit egy `a` aztán +egy `r` karakter követ. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/tUxrBG/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/tUxrBG/1) + +## 2.6 Alternation +## 2.6 Alternálás + +In regular expression Vertical bar `|` is used to define alternation. +Alternation is like a condition between multiple expressions. Now, you may be +thinking that character set and alternation works the same way. But the big +difference between character set and alternation is that character set works on +character level but alternation works on expression level. For example, the +regular expression `(T|t)he|car` means: uppercase character `T` or lowercase +`t`, followed by lowercase character `h`, followed by lowercase character `e` or +lowercase character `c`, followed by lowercase character `a`, followed by +lowercase character `r`. + +A reguláris kifejezésben a függőleges vonalat `|` alternálásra (választásra) +használjuk. Az alternálás olyan, mint egy feltétel több kifejezés közt. Most +azt gondolhatod, hogy a karakter osztály és az alternáció ugyan úgy működik. +De a fő különbség köztük, hogy a karakter osztály a karakterek szintjén működik, +az alternáció viszont a kifejezés szintjén. Például a `(T|t)he|car` kifejezés +jelentése: nagybetűs `T` karakter vagy kisbetűs `t` karakter, amit egy `h` és +egy `e` követ, VAGY kisbetűs `c` aztán `a` aztán `r` karakter. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/fBXyX0/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/fBXyX0/1) + +## 2.7 Escaping special character +## 2.7 Speciális karakter escape-elése + +Backslash `\` is used in regular expression to escape the next character. This +allows us to specify a symbol as a matching character including reserved +characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching +character prepend `\` before it. + +A visszaper `\` a reguláris kifejezésekben a következő karakter escape-elésére +való. Ez enged nekünk szimbólumokat vagy lefoglalt karaktereket `{ } [ ] / \ + * . $ ^ | ?` +megadni. Egy speciális karakter egyező karakterként való megadásához tedd elé +a `\` karaktert. + +For example, the regular expression `.` is used to match any character except +newline. Now to match `.` in an input string the regular expression +`(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase +character `a`, followed by lowercase letter `t`, followed by optional `.` +character. + +Például a `.` kifejezést az összes karakter, kivéve a sortörés illeszkedéséhez +használjuk. A `(f|c|m)at\.?` kifejezés jelentése: kisbetűs `f`, `c` vagy `m`, amit +egy kisbetűs `a` aztán egy kisbetűs `t`, amit egy opcionális `.` karakter követ. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/DOc5Nu/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/fBXyX0/1) + +## 2.8 Anchors +## 2.8 Horgonyok + +In regular expressions, we use anchors to check if the matching symbol is the +starting symbol or ending symbol of the input string. Anchors are of two types: +First type is Caret `^` that check if the matching character is the start +character of the input and the second type is Dollar `$` that checks if matching +character is the last character of the input string. + +A reguláris kifejezésekben horgonyokat használunk, hogy megnézzük, az illeszkedő +szimbólum a kezdő vagy a záró szimbóluma-e a karakterláncnak. A horgonyoknak két +fajtájuk van: Az első a Kalap `^`, ami megnézi, hogy az egyező karakter a karakterlánc +kezdő kerektere-e és a második a Dollár `$`, ami azt vizsgálja, hogy az egyező +karakter a karakterlánc utolsó karaktere-e. + +### 2.8.1 Caret +### 2.8.1 Kalap + +Caret `^` symbol is used to check if matching character is the first character +of the input string. If we apply the following regular expression `^a` (if a is +the starting symbol) to input string `abc` it matches `a`. But if we apply +regular expression `^b` on above input string it does not match anything. +Because in input string `abc` "b" is not the starting symbol. Let's take a look +at another regular expression `^(T|t)he` which means: uppercase character `T` or +lowercase character `t` is the start symbol of the input string, followed by +lowercase character `h`, followed by lowercase character `e`. + +A kalap `^` szimbólumot arra használjuk, hogy megnézzük, hogy az egyező karakter +a karakterlánc kezdő kerektere-e. Ha megadjuk a következő kifejezést: `^a`, +akkor illeszkedik a `abc` karakterlánc `a` karakterére, mert az za első. De ha +megadjuk, hogy: `^b`, ez nem fog illeszkedni az `abc` egyik részére sem, mert +nem `b` a kezdő karakter. Nézzünk meg egy másik kifejezést. `^(T|t)he` jelentése: +nagybetűs `T` vagy kisbetűs `t` a kezdő karaktere a karakterláncnak, amit kisbetűs +`h`, majd kisbetűs `e` követ. + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/5ljjgB/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/jXrKne/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Dollar +### 2.8.2 Dollár + +Dollar `$` symbol is used to check if matching character is the last character +of the input string. For example, regular expression `(at\.)$` means: a +lowercase character `a`, followed by lowercase character `t`, followed by a `.` +character and the matcher must be end of the string. + +A dollár `$` szimbólumot arra használjuk, hogy megnézzük, hogy az egyező +karakter a karakterlánc utolsó karaktere-e. Például a `(at\.)$` kifejezés +jelentése: egy kisbetűs `a`, amit egy kisbetűs `t`, amit egy `.` követ. És +ennek az egésznek a karakterlánc végén kell lennie. + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/y4Au4D/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/t0AkOd/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/t0AkOd/1) + +## 3. Shorthand Character Sets +## 3. Shorthand Karakter osztályok + +Regular expression provides shorthands for the commonly used character sets, +which offer convenient shorthands for commonly used regular expressions. The +shorthand character sets are as follows: + +A gyakran használt karakter osztályokra a reguláris kifejezésnek vannak +rövidítései, amikkel kényelmesebben tudunk használni általános kifejezéseket. +A shorthand karakter osztályok a következők: + +|Shorthand|Description| +|:----:|----| +|.|Any character except new line| +|\w|Matches alphanumeric characters: `[a-zA-Z0-9_]`| +|\W|Matches non-alphanumeric characters: `[^\w]`| +|\d|Matches digit: `[0-9]`| +|\D|Matches non-digit: `[^\d]`| +|\s|Matches whitespace character: `[\t\n\f\r\p{Z}]`| +|\S|Matches non-whitespace character: `[^\s]`| + +|Rövidítés|Leírás| +|:----:|----| +|.|Minden karakter a sortörésen kívül.| +|\w|Az alfanumerikus karakterekre illeszkedik: `[a-zA-Z0-9_]`| +|\W|A nem alfanumerikus karakterekre illeszkedik: `[^\w]`| +|\d|Számra illeszkedik: `[0-9]`| +|\D|Nem számra illeszkedik: `[^\d]`| +|\s|Whitespace karakterre illeszkedik: `[\t\n\f\r\p{Z}]`| +|\S|Nem whitespace karakterre illeszkedik: `[^\s]`| + +## 4. Lookaround +## 4. Lookaround + +Lookbehind and lookahead (also called lookaround) are specific types of +***non-capturing groups*** (Used to match the pattern but not included in matching +list). Lookaheads are used when we have the condition that this pattern is +preceded or followed by another certain pattern. For example, we want to get all +numbers that are preceded by `$` character from the following input string +`$4.44 and $10.88`. We will use following regular expression `(?<=\$)[0-9\.]*` +which means: get all the numbers which contain `.` character and are preceded +by `$` character. Following are the lookarounds that are used in regular +expressions: + +A lookbehind (hátranézés) és a lookahead (előrenézés) speciális típusai a +***nem tárolt csoport***oknak, amiket illeszkedésre használnak, de nincsenek +benne az illeszkedési listában. Az előrenézést akkor használjuk, ha feltételezzük, +hogy ezt a mintát egy másik minta előzi meg, vagy követi. Például kell nekünk +az összes szám ami előtt `$` karakter áll a következő karakterláncból: `$4.44 and $10.88`. +Ezt a mintát fogjuk használni: `(?<=\$)[0-9\.]*`, aminek a jelentése: Szedd ki az +összes számot ami `.` karaktert tartalmaz és megelőzi egy `$` karakter. A +következő lookaround-okat használhatjuk: + +|Symbol|Description| +|:----:|----| +|?=|Positive Lookahead| +|?!|Negative Lookahead| +|?<=|Positive Lookbehind| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. +
+ +[Test the regular expression](https://regex101.com/r/IDDARt/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/IDDARt/1) + +### 4.2 Negative Lookahead +### 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 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 +from input string that are not followed by the word `fat` precedes by a space +character. + +A negatív előrenézést akkor használjuk, ha az olyan illeszkedések kellenek, +amelyeket nem követ egy bizonyos minta. A negatív előrenézést ugyanúgy +definiáljuk mint a pozitív előrenézést, az egyetlen különbség, hogy az +egyenlőségjel `=` helyett negálást `!` használunk: `(?!...)`. Nézzük meg +a következő kifejezést: `(T|t)he(?!\sfat)`, jelentése: szedd ki az összes +`The` vagy `the` szót, amelyeket nem követ a `fat` szó (amit még megelőz +egy szóköz). + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/V32Npg/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/V32Npg/1) + +### 4.3 Positive Lookbehind +### 4.3 Positive Lookbehind + +Positive lookbehind is used to get all the matches that are preceded by a +specific pattern. Positive lookbehind is denoted by `(?<=...)`. For example, the +regular expression `(?<=(T|t)he\s)(fat|mat)` means: get all `fat` or `mat` words +from input string that are after the word `The` or `the`. + +A pozitív hátranézést akkor használjuk, ha kell az összes illeszkedés, amit +egy megadott minta előz meg. A pozitív hátranézés így van jelölve: `(?<=...)`. +A `(?<=(T|t)he\s)(fat|mat)` jelentése: szedd ki az összes `fat` vagy `mat` szót +amelyek a `The` vagy a `the` szavak után vannak. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/avH165/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/avH165/1) + +### 4.4 Negative Lookbehind +### 4.4 Negative Lookbehind + +Negative lookbehind is used to get all the matches that are not preceded by a +specific pattern. Negative lookbehind is denoted by `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. +
+ +[Test the regular expression](https://regex101.com/r/8Efx5G/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/8Efx5G/1) + +## 5. Flags +## 5. Flag-ek + +Flags are also called modifiers because they modify the output of a regular +expression. These flags can be used in any order or combination, and are an +integral part of the RegExp. + +A flag-eket módosítónak hívják, mert módosítják a reguláris kifejezés +kimenetét. Ezeket a flag-eket bármilyen sorban vagy kombinációban lehet +használni, a RegExp szerves részét képezik. + +|Flag|Description| +|:----:|----| +|i|Case insensitive: Sets matching to be case-insensitive.| +|g|Global Search: Search for a pattern throughout the input string.| +|m|Multiline: Anchor meta character works on each line.| + +|Flag|Leírás| +|:----:|----| +|i|Kis-nagybetű érzéketlen: Beállítja, hogy az illeszkedés kis-nagybetű érzéketlen legyen.| +|g|Globális keresés: A bemeneti szövegben mindenütt keresi az illeszkedéseket.| +|m|Többsoros: A horgonyok az összes sorra működnek.| + +### 5.1 Case Insensitive +### 5.1 Kis-nagybetű érzéketlen + +The `i` modifier is used to perform case-insensitive matching. For example, the +regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase +character `h`, followed by character `e`. And at the end of regular expression +the `i` flag tells the regular expression engine to ignore the case. As you can +see we also provided `g` flag because we want to search for the pattern in the +whole input string. + +Az `i` módosító beállítja, hogy az illeszkedés ne legyen kis-nagybetű érzékeny. +Például a `/The/gi` kifejezés jelentése: nagybetűs `T` amit kisbetűs `h`, majd `e` +követ. A kifejezés végén az `i` megmondja a reguláris kifejezés motornak, hogy +hagyja figyelmen kívül a betűk méretét. Ahogy látod, megadtuk a `g` flag-et, mert +az egész bemeneti szövegben akarjuk keresni az illeszkedéseket. + +
+"The" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dpQyf9/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/ahfiuh/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/ahfiuh/1) + +### 5.2 Global search +### 5.2 Globális keresés + +The `g` modifier is used to perform a global match (find all matches rather than +stopping after the first match). For example, the regular expression`/.(at)/g` +means: any character except new line, followed by lowercase character `a`, +followed by lowercase character `t`. Because we provided `g` flag at the end of +the regular expression now it will find all matches in the input string, not just the first one (which is the default behavior). + +A `g` módosítót arra használjuk, hogy globálisan keressünk illeszkedéseket. +(Megkeresi az összes előfordulást, nem áll meg az első egyezés után). Például +a `/.(at)/g` kifejezés jelentése: minden karakter, kivéve a sortörést, amelyet +`a` és `t` követ. Mivel megadtuk a `g` flag-et, az összes ilyenre fog illeszkedni, +nem csak az elsőre (ami az alapértelmezett viselkedés). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/jnk6gM/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dO1nef/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/dO1nef/1) + +### 5.3 Multiline +### 5.3 Többsoros + +The `m` modifier is used to perform a multi-line match. As we discussed earlier +anchors `(^, $)` are used to check if pattern is the beginning of the input or +end of the input string. But if we want that anchors works on each line we use +`m` flag. For example, the regular expression `/at(.)?$/gm` means: lowercase +character `a`, followed by lowercase character `t`, optionally anything except +new line. And because of `m` flag now regular expression engine matches pattern +at the end of each line in a string. + +Az `m` módosítót a többsoros illeszkedésekhez használjuk. Ahogy előzőleg beszéltük, +a horgonyokat `(^, $)` arra használjuk, hogy megnézzük, a minta az eleje, vagy a vége-e +a vizsgált karakterláncnak. De ha azt szeretnénk, hogy a horgonyok az összes soron +működjenek, használjuk az `m` módosítót. Például a `/at(.)?$/gm` kifejezés jelentése: +kisbetűs `a` karakter, amit egy kisbetűs `t` követ, amit opcionálisan bármi követhet, +kivéve sortörés. És az `m` flag miatt a reguláris kifejezés motor az összes sor +végéig keres illeszkedést. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/hoGMkP/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/E88WE2/1) +[Teszteld a reguláris kifejezést](https://regex101.com/r/E88WE2/1) + +## Contribution +## Hozzájárulás + +* Report issues +* Open pull request with improvements +* Spread the word +* Reach out to me directly at ziishaned@gmail.com or [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +* Jelents hibákat +* Nyiss pull request-eket fejlesztésekkel +* Hírdesd az igét +* Érj el közvetlenül itt: ziishaned@gmail.com vagy [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## License +## Licenc + +MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com) diff --git a/img/regexp-hu.png b/img/regexp-hu.png new file mode 100644 index 0000000000000000000000000000000000000000..70d1f516881f7a93647beb8fb680df08c95c235f GIT binary patch literal 35766 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 literal 0 HcmV?d00001 From 8caf03bceb3d40687889113bed5fb2cef2fb68be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Munk=C3=A1csi=20M=C3=A1rk?= Date: Tue, 24 Oct 2017 23:10:13 +0200 Subject: [PATCH 007/156] typos --- README-hu.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README-hu.md b/README-hu.md index a0e08a2d..a198a9e5 100644 --- a/README-hu.md +++ b/README-hu.md @@ -30,7 +30,7 @@ replacing a text within a string, validating form, extract a substring from a string based upon a pattern match, and so much more. A reguláris kifejezés egy olyan minta, amely illeszkedik egy adott karakterláncra -balról jobbra. Maga a "Regular expression" kifejezést általában rövidítve lehet +balról jobbra. Magát a "Regular expression" kifejezést általában rövidítve lehet megtalálni, mint "regex" vagy "regexp". A reguláris kifejezést használják szövegrészek lecserélésére egy szövegben, űrlapok validálására, szövegrészek kiválasztására mintaegyezés alapján egy hosszabb szövegből és így tovább. @@ -193,8 +193,8 @@ szögletes zárójelek közé vannak téve. A meta karakterek a következők: |(xyz)|Karakter csoport. Illeszkedik az xyz karakterekre pontosan ilyen sorrendben.| |||Alternáció. Illeszkedik a szimbólum előtt és után álló karakterekre is.| |\|Escape-li a következő karaktert. A segítségével lefoglalt karakterekre is lehet illeszkedni [ ] ( ) { } . * + ? ^ $ \ || -|^|A bevitel elejére illeszkedik.| -|$|A bevitel végére illeszkedik.| +|^|A karakterlánc elejére illeszkedik.| +|$|A karakterlánc végére illeszkedik.| ## 2.1 Full stop ## 2.1 Full stop @@ -620,7 +620,7 @@ by `$` character. Following are the lookarounds that are used in regular expressions: A lookbehind (hátranézés) és a lookahead (előrenézés) speciális típusai a -***nem tárolt csoport***oknak, amiket illeszkedésre használnak, de nincsenek +***nem tárolt csoport*** oknak, amiket illeszkedésre használnak, de nincsenek benne az illeszkedési listában. Az előrenézést akkor használjuk, ha feltételezzük, hogy ezt a mintát egy másik minta előzi meg, vagy követi. Például kell nekünk az összes szám ami előtt `$` karakter áll a következő karakterláncból: `$4.44 and $10.88`. From be9c737cdd6b9e6079a7620cab10079255db33be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Munk=C3=A1csi=20M=C3=A1rk?= Date: Tue, 24 Oct 2017 23:22:28 +0200 Subject: [PATCH 008/156] removed english text --- README-hu.md | 340 --------------------------------------------------- 1 file changed, 340 deletions(-) diff --git a/README-hu.md b/README-hu.md index a198a9e5..44ef5590 100644 --- a/README-hu.md +++ b/README-hu.md @@ -3,7 +3,6 @@ Learn Regex


-## Translations: ## Fordítások: * [English](README.md) @@ -17,30 +16,16 @@ * [Greek](README-gr.md) * [Magyar](README-hu.md) -## What is Regular Expression? ## Mi az a reguláris kifejezés? -> Regular expression is a group of characters or symbols which is used to find a specific pattern from a text. > A reguláris kifejezés karakterek vagy szimbólumok egy csoportja, amelyet egy szövegből adott minták megtalálására használnak. -A regular expression is a pattern that is matched against a subject string from -left to right. The word "Regular expression" is a mouthful, you will usually -find the term abbreviated as "regex" or "regexp". Regular expression is used for -replacing a text within a string, validating form, extract a substring from a -string based upon a pattern match, and so much more. - A reguláris kifejezés egy olyan minta, amely illeszkedik egy adott karakterláncra balról jobbra. Magát a "Regular expression" kifejezést általában rövidítve lehet megtalálni, mint "regex" vagy "regexp". A reguláris kifejezést használják szövegrészek lecserélésére egy szövegben, űrlapok validálására, szövegrészek kiválasztására mintaegyezés alapján egy hosszabb szövegből és így tovább. -Imagine you are writing an application and you want to set the rules for when a -user chooses their username. We want to allow the username to contain letters, -numbers, underscores and hyphens. We also want to limit the number of characters -in username so it does not look ugly. We use the following regular expression to -validate a username: - Képzeld el, hogy egy alkalmazást írsz és szeretnél szabályokat állítani a felhasználónév kiválasztásához. A felhasználónév csak betűket, számokat, aláhúzásjelet és kötőjelet tartalmazhat. Szeretnénk limitálni a karakterek maximális számát is a felhasználónévben, @@ -49,48 +34,15 @@ használjuk:

- Regular expression Regular expression

-Above regular expression can accept the strings `john_doe`, `jo-hn_doe` and -`john12_as`. It does not match `Jo` because that string contains uppercase -letter and also it is too short. - A feljebbi reguláris kifejezés elfogadja a `john_doe`, `jo-hn_doe` és a `john12_as` karakterláncokat. Nem fog egyezni a `Jo`-ra mert ez nagybetűt tartalmaz és túl rövid is. -## Table of Contents ## Tartalomjegyzék -- [Basic Matchers](#1-basic-matchers) -- [Meta character](#2-meta-characters) - - [Full stop](#21-full-stop) - - [Character set](#22-character-set) - - [Negated character set](#221-negated-character-set) - - [Repetitions](#23-repetitions) - - [The Star](#231-the-star) - - [The Plus](#232-the-plus) - - [The Question Mark](#233-the-question-mark) - - [Braces](#24-braces) - - [Character Group](#25-character-group) - - [Alternation](#26-alternation) - - [Escaping special character](#27-escaping-special-character) - - [Anchors](#28-anchors) - - [Caret](#281-caret) - - [Dollar](#282-dollar) -- [Shorthand Character Sets](#3-shorthand-character-sets) -- [Lookaround](#4-lookaround) - - [Positive Lookahead](#41-positive-lookahead) - - [Negative Lookahead](#42-negative-lookahead) - - [Positive Lookbehind](#43-positive-lookbehind) - - [Negative Lookbehind](#44-negative-lookbehind) -- [Flags](#5-flags) - - [Case Insensitive](#51-case-insensitive) - - [Global search](#52-global-search) - - [Multiline](#53-multiline) - - [Bevezetés](#1-basic-matchers) - [Meta karakterek](#2-meta-characters) - [Full stop](#21-full-stop) @@ -118,13 +70,8 @@ tartalmaz és túl rövid is. - [Globális keresés](#52-global-search) - [Többsoros](#53-multiline) -## 1. Basic Matchers ## 1. Bevezetés -A regular expression is just a pattern of characters that we use to perform -search in a text. For example, the regular expression `the` means: the letter -`t`, followed by the letter `h`, followed by the letter `e`. - A reguláris kifejezés egy karakterminta, amit keresésre használunk egy szövegben. Például a `the` reguláris kifejezés a következőt jelenti: egy `t` betű, amit `h` követ, amit egy `e` követ. @@ -133,15 +80,8 @@ amit `h` követ, amit egy `e` követ. "the" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/dmRygT/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/dmRygT/1) -The regular expression `123` matches the string `123`. The regular expression is -matched against an input string by comparing each character in the regular -expression to each character in the input string, one after another. Regular -expressions are normally case-sensitive so the regular expression `The` would -not match the string `the`. - Az `123` reguláris kifejezés illeszkedik a `123` karakterláncra. A reguláris kifejezés minden egyes karaktere össze lesz hasonlítva a bevitt karakterlánc minden elemével egymás után. A reguláris kifejezések alap esetben kis-nagybetű érzékenyek, tehát a @@ -151,36 +91,14 @@ egymás után. A reguláris kifejezések alap esetben kis-nagybetű érzékenyek "The" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/1paXsy/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/1paXsy/1) -## 2. Meta Characters ## 2. Meta karakterek -Meta characters are the building blocks of the regular expressions. Meta -characters do not stand for themselves but instead are interpreted in some -special way. Some meta characters have a special meaning and are written inside -square brackets. The meta characters are as follows: - A meta karakterek a reguláris kifejezések építőkockái. A meta karakterek speciális módon értelmezendőek. Némelyik meta karakternek speciális jelentése van és szögletes zárójelek közé vannak téve. A meta karakterek a következők: -|Meta character|Description| -|:----:|----| -|.|Period matches any single character except a line break.| -|[ ]|Character class. Matches any character contained between the square brackets.| -|[^ ]|Negated character class. Matches any character that is not contained between the square brackets| -|*|Matches 0 or more repetitions of the preceding symbol.| -|+|Matches 1 or more repetitions of the preceding symbol.| -|?|Makes the preceding symbol optional.| -|{n,m}|Braces. Matches at least "n" but not more than "m" repetitions of the preceding symbol.| -|(xyz)|Character group. Matches the characters xyz in that exact order.| -|||Alternation. Matches either the characters before or the characters after the symbol.| -|\|Escapes the next character. This allows you to match reserved characters [ ] ( ) { } . * + ? ^ $ \ || -|^|Matches the beginning of the input.| -|$|Matches the end of the input.| - |Meta karakter|Leírás| |:----:|----| |.|A pont illeszkedik minden egyes karakterre kivéve a sortörést.| @@ -197,12 +115,6 @@ szögletes zárójelek közé vannak téve. A meta karakterek a következők: |$|A karakterlánc végére illeszkedik.| ## 2.1 Full stop -## 2.1 Full stop - -Full stop `.` is the simplest example of meta character. The meta character `.` -matches any single character. It will not match return or newline characters. -For example, the regular expression `.ar` means: any character, followed by the -letter `a`, followed by the letter `r`. A full stop `.` a legegyszerűbb meta karakter példa. A `.` meta karakter illeszkedik minden egyes karakterre. Nem fog illeszkedni a kocsi vissza és a sortörés karakterekre. @@ -212,18 +124,10 @@ Például a `.ar` reguláris kifejezés jelentése: minden karakter, amit `a` az ".ar" => The car parked in the garage.
-[Test the regular expression](https://regex101.com/r/xc9GkU/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/xc9GkU/1) -## 2.2 Character set ## 2.2 Karakter osztályok -Character sets are also called character class. Square brackets are used to -specify character sets. Use a hyphen inside a character set to specify the -characters' range. The order of the character range inside square brackets -doesn't matter. For example, the regular expression `[Tt]he` means: an uppercase -`T` or lowercase `t`, followed by the letter `h`, followed by the letter `e`. - A szögletes zárójelekkel határozzuk meg a karakter osztályokat. A szögletes zárójelek közt kötőjel karakterrel határozhatunk meg karakter tartományokat. A karaktertartomány sorrendje nem számít. Például a `[Tt]he` reguláris kifejezés @@ -233,13 +137,8 @@ jelentése: nagybetűs `T` vagy kisbetűs `t` amit egy `h` majd egy `e` betű k "[Tt]he" => The car parked in the garage.
-[Test the regular expression](https://regex101.com/r/2ITLQ4/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/2ITLQ4/1) -A period inside a character set, however, means a literal period. The regular -expression `ar[.]` means: a lowercase character `a`, followed by letter `r`, -followed by a period `.` character. - Egy pont a karakter osztályon belül egyébként szó szerint pont-ot jelent. A `ar[.]` reguláris kifejezés jelentése: kisbetűs `a` amit egy `r` aztán egy pont `.` karakter követ. @@ -248,17 +147,10 @@ pont `.` karakter követ. "ar[.]" => A garage is a good place to park a car.
-[Test the regular expression](https://regex101.com/r/wL3xtE/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/wL3xtE/1) -### 2.2.1 Negated character set ### 2.2.1 Negált karakter osztályok -In general, the caret symbol represents the start of the string, but when it is -typed after the opening square bracket it negates the character set. For -example, the regular expression `[^c]ar` means: any character except `c`, -followed by the character `a`, followed by the letter `r`. - Általában a kalap szimbólum egy karakterlánc elejét jelenti, de ha egy nyitó szögletes zárójel után áll, akkor negálja a karakter osztályt. Például a `[^c]ar` reguláris kifejezés jelentése: minden karakter a `c` kivételével @@ -268,29 +160,16 @@ ami után `a` aztán egy `r` betű áll. "[^c]ar" => The car parked in the garage.
-[Test the regular expression](https://regex101.com/r/nNNlq3/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/nNNlq3/1) -## 2.3 Repetitions ## 2.3 Ismétlések -Following meta characters `+`, `*` or `?` are used to specify how many times a -subpattern can occur. These meta characters act differently in different -situations. - A következő meta karaktereket `+`, `*` vagy `?` arra használjuk, hogy meghatározzuk, hányszor fordulhat elő az al-minta. Ezek a meta karakterek máshogy viselkednek adott helyzetekben. -### 2.3.1 The Star ### 2.3.1 A csillag -The symbol `*` matches zero or more repetitions of the preceding matcher. The -regular expression `a*` means: zero or more repetitions of preceding lowercase -character `a`. But if it appears after a character set or class then it finds -the repetitions of the whole character set. For example, the regular expression -`[a-z]*` means: any number of lowercase letters in a row. - A `*` szimbólum az őt megelőző karakter nulla vagy több ismétlődésére illeszkedik. A `a*` reguláris kifejezés jelentése: nulla vagy több ismétlődése az őt megelőző `a` karakternek. De ha egy karakter osztály után áll akkor az egész karakterosztály @@ -301,16 +180,8 @@ kisbetűs betű egy sorban. "[a-z]*" => The car parked in the garage #21.
-[Test the regular expression](https://regex101.com/r/7m8me5/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/7m8me5/1) -The `*` symbol can be used with the meta character `.` to match any string of -characters `.*`. The `*` symbol can be used with the whitespace character `\s` -to match a string of whitespace characters. For example, the expression -`\s*cat\s*` means: zero or more spaces, followed by lowercase character `c`, -followed by lowercase character `a`, followed by lowercase character `t`, -followed by zero or more spaces. - A `*` szimbólum használható a `.` meta karakterrel `.*`, ez illeszkedik bármilyen karakterláncra. A `*` szimbólum használható a whitespace karakterrel `\s` együtt, hogy illeszkedjen egy whitespace-ekből álló karakterláncra. Például a @@ -321,17 +192,10 @@ aztán egy kisbetűs `a`, aztán egy kisbetűs `t`, amit még nulla vagy több s "\s*cat\s*" => The fat cat sat on the concatenation.
-[Test the regular expression](https://regex101.com/r/gGrwuz/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/gGrwuz/1) -### 2.3.2 The Plus ### 2.3.2 A plusz -The symbol `+` matches one or more repetitions of the preceding character. For -example, the regular expression `c.+t` means: lowercase letter `c`, followed by -at least one character, followed by the lowercase character `t`. It needs to be -clarified that `t` is the last `t` in the sentence. - A `+` szimbólum illeszkedik az őt megelőző karakter egy vagy több ismétlődésére. Például a `c.+t` kifejezés jelentése: kisbetűs `c` betű, amit legalább egy vagy több `t` követ. Itt tisztázni kell hogy a `t` az utolsó `t` a mondatban. @@ -340,18 +204,10 @@ több `t` követ. Itt tisztázni kell hogy a `t` az utolsó `t` a mondatban. "c.+t" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/Dzf9Aa/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/Dzf9Aa/1) -### 2.3.3 The Question Mark ### 2.3.3 A kérdőjel -In regular expression the meta character `?` makes the preceding character -optional. This symbol matches zero or one instance of the preceding character. -For example, the regular expression `[T]?he` means: Optional the uppercase -letter `T`, followed by the lowercase character `h`, followed by the lowercase -character `e`. - A reguláris kifejezésben a `?` meta karakter opcionálissá teszi az őt megelőző karaktert. Ez a szimbólum az őt megelőző karakter nulla vagy egy példányára illeszkedik. Például a `[T]?he` kifejezés jelentése: opcionális a @@ -361,24 +217,16 @@ nagybetűs `T`, amit egy kisbetűs `h`, majd egy kisbetűs `e` követ. "[T]he" => The car is parked in the garage.
-[Test the regular expression](https://regex101.com/r/cIg9zm/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/cIg9zm/1)
 "[T]?he" => The car is parked in the garage.
 
-[Test the regular expression](https://regex101.com/r/kPpO2x/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/kPpO2x/1) -## 2.4 Braces ## 2.4 A kapcsos zárójelek -In regular expression braces that are also called quantifiers are used to -specify the number of times that a character or a group of characters can be -repeated. For example, the regular expression `[0-9]{2,3}` means: Match at least -2 digits but not more than 3 ( characters in the range of 0 to 9). - A reguláris kifejezésben a kapcsos zárójeleket annak meghatározására használjuk, hogy egy karakter vagy egy karakter csoport hányszor ismétlődhet. Például a `[0-9]{2,3}` kifejezés jelentése: minimum 2 de nem több mint 3 karakter a `[0-9]` @@ -388,13 +236,8 @@ karaktertartományon belül. "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
-[Test the regular expression](https://regex101.com/r/juM86s/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/juM86s/1) -We can leave out the second number. For example, the regular expression -`[0-9]{2,}` means: Match 2 or more digits. If we also remove the comma the -regular expression `[0-9]{3}` means: Match exactly 3 digits. - Kihagyhatjuk a második számot. Például a `[0-9]{2,}` kifejezés jelentése: 2 vagy több számra illeszkedik. Ha a vesszőt is kitöröljük `[0-9]{3}`: Pontosan 3 számra illeszkedik. @@ -403,28 +246,16 @@ Kihagyhatjuk a második számot. Például a `[0-9]{2,}` kifejezés jelentése: "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
-[Test the regular expression](https://regex101.com/r/Gdy4w5/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/Gdy4w5/1)
 "[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
 
-[Test the regular expression](https://regex101.com/r/Sivu30/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/Sivu30/1) -## 2.5 Character Group ## 2.5 Karakter csoportok -Character group is a group of sub-patterns that is written inside Parentheses `(...)`. -As we discussed before that in regular expression if we put a quantifier after a -character then it will repeat the preceding character. But if we put quantifier -after a character group then it repeats the whole character group. For example, -the regular expression `(ab)*` matches zero or more repetitions of the character -"ab". We can also use the alternation `|` meta character inside character group. -For example, the regular expression `(c|g|p)ar` means: lowercase character `c`, -`g` or `p`, followed by character `a`, followed by character `r`. - A karakter csoport al-minták csoportja amik zárójelek közé `(...)` vannak írva. Ahogy előbb már megbeszéltük, ha egy karakter után ismétlő karaktert rakunk, az ismételni fogja az előtte lévő karaktert. De ha egy ismétlő karaktert egy karakter @@ -438,22 +269,10 @@ egy `r` karakter követ. "(c|g|p)ar" => The car is parked in the garage.
-[Test the regular expression](https://regex101.com/r/tUxrBG/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/tUxrBG/1) -## 2.6 Alternation ## 2.6 Alternálás -In regular expression Vertical bar `|` is used to define alternation. -Alternation is like a condition between multiple expressions. Now, you may be -thinking that character set and alternation works the same way. But the big -difference between character set and alternation is that character set works on -character level but alternation works on expression level. For example, the -regular expression `(T|t)he|car` means: uppercase character `T` or lowercase -`t`, followed by lowercase character `h`, followed by lowercase character `e` or -lowercase character `c`, followed by lowercase character `a`, followed by -lowercase character `r`. - A reguláris kifejezésben a függőleges vonalat `|` alternálásra (választásra) használjuk. Az alternálás olyan, mint egy feltétel több kifejezés közt. Most azt gondolhatod, hogy a karakter osztály és az alternáció ugyan úgy működik. @@ -466,28 +285,15 @@ egy `e` követ, VAGY kisbetűs `c` aztán `a` aztán `r` karakter. "(T|t)he|car" => The car is parked in the garage.
-[Test the regular expression](https://regex101.com/r/fBXyX0/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/fBXyX0/1) -## 2.7 Escaping special character ## 2.7 Speciális karakter escape-elése -Backslash `\` is used in regular expression to escape the next character. This -allows us to specify a symbol as a matching character including reserved -characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching -character prepend `\` before it. - A visszaper `\` a reguláris kifejezésekben a következő karakter escape-elésére való. Ez enged nekünk szimbólumokat vagy lefoglalt karaktereket `{ } [ ] / \ + * . $ ^ | ?` megadni. Egy speciális karakter egyező karakterként való megadásához tedd elé a `\` karaktert. -For example, the regular expression `.` is used to match any character except -newline. Now to match `.` in an input string the regular expression -`(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase -character `a`, followed by lowercase letter `t`, followed by optional `.` -character. - Például a `.` kifejezést az összes karakter, kivéve a sortörés illeszkedéséhez használjuk. A `(f|c|m)at\.?` kifejezés jelentése: kisbetűs `f`, `c` vagy `m`, amit egy kisbetűs `a` aztán egy kisbetűs `t`, amit egy opcionális `.` karakter követ. @@ -496,36 +302,18 @@ egy kisbetűs `a` aztán egy kisbetűs `t`, amit egy opcionális `.` karakter k "(f|c|m)at\.?" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/DOc5Nu/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/fBXyX0/1) -## 2.8 Anchors ## 2.8 Horgonyok -In regular expressions, we use anchors to check if the matching symbol is the -starting symbol or ending symbol of the input string. Anchors are of two types: -First type is Caret `^` that check if the matching character is the start -character of the input and the second type is Dollar `$` that checks if matching -character is the last character of the input string. - A reguláris kifejezésekben horgonyokat használunk, hogy megnézzük, az illeszkedő szimbólum a kezdő vagy a záró szimbóluma-e a karakterláncnak. A horgonyoknak két fajtájuk van: Az első a Kalap `^`, ami megnézi, hogy az egyező karakter a karakterlánc kezdő kerektere-e és a második a Dollár `$`, ami azt vizsgálja, hogy az egyező karakter a karakterlánc utolsó karaktere-e. -### 2.8.1 Caret ### 2.8.1 Kalap -Caret `^` symbol is used to check if matching character is the first character -of the input string. If we apply the following regular expression `^a` (if a is -the starting symbol) to input string `abc` it matches `a`. But if we apply -regular expression `^b` on above input string it does not match anything. -Because in input string `abc` "b" is not the starting symbol. Let's take a look -at another regular expression `^(T|t)he` which means: uppercase character `T` or -lowercase character `t` is the start symbol of the input string, followed by -lowercase character `h`, followed by lowercase character `e`. - A kalap `^` szimbólumot arra használjuk, hogy megnézzük, hogy az egyező karakter a karakterlánc kezdő kerektere-e. Ha megadjuk a következő kifejezést: `^a`, akkor illeszkedik a `abc` karakterlánc `a` karakterére, mert az za első. De ha @@ -538,24 +326,16 @@ nagybetűs `T` vagy kisbetűs `t` a kezdő karaktere a karakterláncnak, amit ki "(T|t)he" => The car is parked in the garage.
-[Test the regular expression](https://regex101.com/r/5ljjgB/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/5ljjgB/1)
 "^(T|t)he" => The car is parked in the garage.
 
-[Test the regular expression](https://regex101.com/r/jXrKne/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/jXrKne/1) -### 2.8.2 Dollar ### 2.8.2 Dollár -Dollar `$` symbol is used to check if matching character is the last character -of the input string. For example, regular expression `(at\.)$` means: a -lowercase character `a`, followed by lowercase character `t`, followed by a `.` -character and the matcher must be end of the string. - A dollár `$` szimbólumot arra használjuk, hogy megnézzük, hogy az egyező karakter a karakterlánc utolsó karaktere-e. Például a `(at\.)$` kifejezés jelentése: egy kisbetűs `a`, amit egy kisbetűs `t`, amit egy `.` követ. És @@ -565,37 +345,20 @@ ennek az egésznek a karakterlánc végén kell lennie. "(at\.)" => The fat cat. sat. on the mat.
-[Test the regular expression](https://regex101.com/r/y4Au4D/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/y4Au4D/1)
 "(at\.)$" => The fat cat. sat. on the mat.
 
-[Test the regular expression](https://regex101.com/r/t0AkOd/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/t0AkOd/1) -## 3. Shorthand Character Sets ## 3. Shorthand Karakter osztályok -Regular expression provides shorthands for the commonly used character sets, -which offer convenient shorthands for commonly used regular expressions. The -shorthand character sets are as follows: - A gyakran használt karakter osztályokra a reguláris kifejezésnek vannak rövidítései, amikkel kényelmesebben tudunk használni általános kifejezéseket. A shorthand karakter osztályok a következők: -|Shorthand|Description| -|:----:|----| -|.|Any character except new line| -|\w|Matches alphanumeric characters: `[a-zA-Z0-9_]`| -|\W|Matches non-alphanumeric characters: `[^\w]`| -|\d|Matches digit: `[0-9]`| -|\D|Matches non-digit: `[^\d]`| -|\s|Matches whitespace character: `[\t\n\f\r\p{Z}]`| -|\S|Matches non-whitespace character: `[^\s]`| - |Rövidítés|Leírás| |:----:|----| |.|Minden karakter a sortörésen kívül.| @@ -606,19 +369,8 @@ A shorthand karakter osztályok a következők: |\s|Whitespace karakterre illeszkedik: `[\t\n\f\r\p{Z}]`| |\S|Nem whitespace karakterre illeszkedik: `[^\s]`| -## 4. Lookaround ## 4. Lookaround -Lookbehind and lookahead (also called lookaround) are specific types of -***non-capturing groups*** (Used to match the pattern but not included in matching -list). Lookaheads are used when we have the condition that this pattern is -preceded or followed by another certain pattern. For example, we want to get all -numbers that are preceded by `$` character from the following input string -`$4.44 and $10.88`. We will use following regular expression `(?<=\$)[0-9\.]*` -which means: get all the numbers which contain `.` character and are preceded -by `$` character. Following are the lookarounds that are used in regular -expressions: - A lookbehind (hátranézés) és a lookahead (előrenézés) speciális típusai a ***nem tárolt csoport*** oknak, amiket illeszkedésre használnak, de nincsenek benne az illeszkedési listában. Az előrenézést akkor használjuk, ha feltételezzük, @@ -628,13 +380,6 @@ Ezt a mintát fogjuk használni: `(?<=\$)[0-9\.]*`, aminek a jelentése: Szedd k összes számot ami `.` karaktert tartalmaz és megelőzi egy `$` karakter. A következő lookaround-okat használhatjuk: -|Symbol|Description| -|:----:|----| -|?=|Positive Lookahead| -|?!|Negative Lookahead| -|?<=|Positive Lookbehind| -|? The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/IDDARt/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/IDDARt/1) ### 4.2 Negative Lookahead -### 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 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 -from input string that are not followed by the word `fat` precedes by a space -character. A negatív előrenézést akkor használjuk, ha az olyan illeszkedések kellenek, amelyeket nem követ egy bizonyos minta. A negatív előrenézést ugyanúgy @@ -696,16 +419,9 @@ egy szóköz). "(T|t)he(?!\sfat)" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/V32Npg/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/V32Npg/1) ### 4.3 Positive Lookbehind -### 4.3 Positive Lookbehind - -Positive lookbehind is used to get all the matches that are preceded by a -specific pattern. Positive lookbehind is denoted by `(?<=...)`. For example, the -regular expression `(?<=(T|t)he\s)(fat|mat)` means: get all `fat` or `mat` words -from input string that are after the word `The` or `the`. A pozitív hátranézést akkor használjuk, ha kell az összes illeszkedés, amit egy megadott minta előz meg. A pozitív hátranézés így van jelölve: `(?<=...)`. @@ -716,16 +432,9 @@ amelyek a `The` vagy a `the` szavak után vannak. "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/avH165/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/avH165/1) ### 4.4 Negative Lookbehind -### 4.4 Negative Lookbehind - -Negative lookbehind is used to get all the matches that are not preceded by a -specific pattern. Negative lookbehind is denoted by `(? The cat sat on cat.
-[Test the regular expression](https://regex101.com/r/8Efx5G/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/8Efx5G/1) -## 5. Flags ## 5. Flag-ek -Flags are also called modifiers because they modify the output of a regular -expression. These flags can be used in any order or combination, and are an -integral part of the RegExp. - A flag-eket módosítónak hívják, mert módosítják a reguláris kifejezés kimenetét. Ezeket a flag-eket bármilyen sorban vagy kombinációban lehet használni, a RegExp szerves részét képezik. -|Flag|Description| -|:----:|----| -|i|Case insensitive: Sets matching to be case-insensitive.| -|g|Global Search: Search for a pattern throughout the input string.| -|m|Multiline: Anchor meta character works on each line.| - |Flag|Leírás| |:----:|----| |i|Kis-nagybetű érzéketlen: Beállítja, hogy az illeszkedés kis-nagybetű érzéketlen legyen.| |g|Globális keresés: A bemeneti szövegben mindenütt keresi az illeszkedéseket.| |m|Többsoros: A horgonyok az összes sorra működnek.| -### 5.1 Case Insensitive ### 5.1 Kis-nagybetű érzéketlen -The `i` modifier is used to perform case-insensitive matching. For example, the -regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase -character `h`, followed by character `e`. And at the end of regular expression -the `i` flag tells the regular expression engine to ignore the case. As you can -see we also provided `g` flag because we want to search for the pattern in the -whole input string. - Az `i` módosító beállítja, hogy az illeszkedés ne legyen kis-nagybetű érzékeny. Például a `/The/gi` kifejezés jelentése: nagybetűs `T` amit kisbetűs `h`, majd `e` követ. A kifejezés végén az `i` megmondja a reguláris kifejezés motornak, hogy @@ -782,25 +471,16 @@ az egész bemeneti szövegben akarjuk keresni az illeszkedéseket. "The" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/dpQyf9/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/dpQyf9/1)
 "/The/gi" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/ahfiuh/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/ahfiuh/1) -### 5.2 Global search ### 5.2 Globális keresés -The `g` modifier is used to perform a global match (find all matches rather than -stopping after the first match). For example, the regular expression`/.(at)/g` -means: any character except new line, followed by lowercase character `a`, -followed by lowercase character `t`. Because we provided `g` flag at the end of -the regular expression now it will find all matches in the input string, not just the first one (which is the default behavior). - A `g` módosítót arra használjuk, hogy globálisan keressünk illeszkedéseket. (Megkeresi az összes előfordulást, nem áll meg az első egyezés után). Például a `/.(at)/g` kifejezés jelentése: minden karakter, kivéve a sortörést, amelyet @@ -811,27 +491,16 @@ nem csak az elsőre (ami az alapértelmezett viselkedés). "/.(at)/" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/jnk6gM/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/jnk6gM/1)
 "/.(at)/g" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/dO1nef/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/dO1nef/1) -### 5.3 Multiline ### 5.3 Többsoros -The `m` modifier is used to perform a multi-line match. As we discussed earlier -anchors `(^, $)` are used to check if pattern is the beginning of the input or -end of the input string. But if we want that anchors works on each line we use -`m` flag. For example, the regular expression `/at(.)?$/gm` means: lowercase -character `a`, followed by lowercase character `t`, optionally anything except -new line. And because of `m` flag now regular expression engine matches pattern -at the end of each line in a string. - Az `m` módosítót a többsoros illeszkedésekhez használjuk. Ahogy előzőleg beszéltük, a horgonyokat `(^, $)` arra használjuk, hogy megnézzük, a minta az eleje, vagy a vége-e a vizsgált karakterláncnak. De ha azt szeretnénk, hogy a horgonyok az összes soron @@ -846,7 +515,6 @@ végéig keres illeszkedést. on the mat.
-[Test the regular expression](https://regex101.com/r/hoGMkP/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/hoGMkP/1)
@@ -855,23 +523,15 @@ végéig keres illeszkedést.
                   on the mat.
 
-[Test the regular expression](https://regex101.com/r/E88WE2/1) [Teszteld a reguláris kifejezést](https://regex101.com/r/E88WE2/1) -## Contribution ## Hozzájárulás -* Report issues -* Open pull request with improvements -* Spread the word -* Reach out to me directly at ziishaned@gmail.com or [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) - * Jelents hibákat * Nyiss pull request-eket fejlesztésekkel * Hírdesd az igét * Érj el közvetlenül itt: ziishaned@gmail.com vagy [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) -## License ## Licenc MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com) From ec60f531e5a831f070cab059b6ea36e88f7f33df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Munk=C3=A1csi=20M=C3=A1rk?= Date: Tue, 24 Oct 2017 23:33:17 +0200 Subject: [PATCH 009/156] hungarian table of contents fixed --- README-hu.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README-hu.md b/README-hu.md index 44ef5590..92a57fb9 100644 --- a/README-hu.md +++ b/README-hu.md @@ -43,32 +43,32 @@ tartalmaz és túl rövid is. ## Tartalomjegyzék -- [Bevezetés](#1-basic-matchers) -- [Meta karakterek](#2-meta-characters) +- [Bevezetés](#1-bevezetés) +- [Meta karakterek](#2-meta-karakterek) - [Full stop](#21-full-stop) - - [Karakter osztályok](#22-character-set) - - [Negált karakter osztályok](#221-negated-character-set) - - [Ismétlések](#23-repetitions) - - [A csillag](#231-the-star) - - [A plusz](#232-the-plus) - - [A kérdőjel](#233-the-question-mark) - - [A kapcsos zárójelek](#24-braces) - - [Karakter csoportok](#25-character-group) - - [Alternálás](#26-alternation) - - [Speciális karakter escape-elése](#27-escaping-special-character) - - [Horgonyok](#28-anchors) - - [Kalap](#281-caret) - - [Dollár](#282-dollar) -- [Shorthand Karakter osztályok](#3-shorthand-character-sets) + - [Karakter osztályok](#22-karakter-osztályok) + - [Negált karakter osztályok](#221-negált-karakter-osztályok) + - [Ismétlések](#23-ismétlések) + - [A csillag](#231-a-csillag) + - [A plusz](#232-a-plusz) + - [A kérdőjel](#233-a-kérdőjel) + - [A kapcsos zárójelek](#24-a-kapcsos-zárójelek) + - [Karakter csoportok](#25-karakter-csoportok) + - [Alternálás](#26-alternálás) + - [Speciális karakter escape-elése](#27-speciális-karakter-escape-elése) + - [Horgonyok](#28-horgonyok) + - [Kalap](#281-kalap) + - [Dollár](#282-dollár) +- [Shorthand Karakter osztályok](#3-shorthand-karakter-osztályok) - [Lookaround](#4-lookaround) - [Positive Lookahead](#41-positive-lookahead) - [Negative Lookahead](#42-negative-lookahead) - [Positive Lookbehind](#43-positive-lookbehind) - [Negative Lookbehind](#44-negative-lookbehind) -- [Flag-ek](#5-flags) - - [Kis-nagybetű érzéketlen](#51-case-insensitive) - - [Globális keresés](#52-global-search) - - [Többsoros](#53-multiline) +- [Flag-ek](#5-flag-ek) + - [Kis-nagybetű érzéketlen](#51-kis-nagybetű-érzéketlen) + - [Globális keresés](#52-globális-keresés) + - [Többsoros](#53-többsoros) ## 1. Bevezetés From aeecdc154a834948e23566cffe4175f3de13ab47 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 13 Jan 2018 22:13:55 +0400 Subject: [PATCH 010/156] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de9ac4ff..f89d1cc1 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,7 @@ followed by lowercase character `a`, followed by lowercase character `t`, followed by zero or more spaces.
-"\s*cat\s*" => The fat cat sat on the concatenation.
+"\s*cat\s*" => The fat cat sat on the concatenation.
 
[Test the regular expression](https://regex101.com/r/gGrwuz/1) From ef6abcb2cfdcb724ad10a7d41d1007210767f351 Mon Sep 17 00:00:00 2001 From: Hello World Date: Fri, 19 Jan 2018 16:00:05 +0800 Subject: [PATCH 011/156] Fix Chinese translation error (#107) --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 0f7e9b81..5899a10a 100644 --- a/README-cn.md +++ b/README-cn.md @@ -454,7 +454,7 @@ 像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 `m`. -例如, 表达式 `/at(.)?$/gm` 表示在待检测字符串每行的末尾搜索 `at`后跟一个或多个 `.` 的字符串, 并返回全部结果. +例如, 表达式 `/at(.)?$/gm` 表示小写字符 `a` 后跟小写字符 `t` , 末尾可选除换行符外任意字符. 根据 `m` 修饰符, 现在表达式匹配每行的结尾.
 "/.at(.)?$/" => The fat

From 755ae62bff06891ad2f0764f45e9cb852926ad96 Mon Sep 17 00:00:00 2001
From: EdgarAllanzp 
Date: Tue, 30 Jan 2018 12:30:10 +0800
Subject: [PATCH 012/156] fix example error at section Greedy vs lazy matching.

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f89d1cc1..d49c725e 100644
--- a/README.md
+++ b/README.md
@@ -546,7 +546,7 @@ By default regex will do greedy matching , means it will match as long as
 possible. we can use `?` to match in lazy way means as short as possible
 
 
-"/(.*at)/" => The fat cat sat on the mat. 
+"/(.*at)/" => The fat cat sat on the mat.
[Test the regular expression](https://regex101.com/r/AyAdgJ/1) From 6d5c34d90678b168af9b0b33fcc6ca2415974fbe Mon Sep 17 00:00:00 2001 From: Edgarli Date: Tue, 30 Jan 2018 14:03:26 +0800 Subject: [PATCH 013/156] fix example error at section Greedy vs lazy matching. (#109) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f89d1cc1..d49c725e 100644 --- a/README.md +++ b/README.md @@ -546,7 +546,7 @@ By default regex will do greedy matching , means it will match as long as possible. we can use `?` to match in lazy way means as short as possible
-"/(.*at)/" => The fat cat sat on the mat. 
+"/(.*at)/" => The fat cat sat on the mat.
[Test the regular expression](https://regex101.com/r/AyAdgJ/1) From 30d0fa33ef4bc14abeda92c0230092e569bf069d Mon Sep 17 00:00:00 2001 From: EdgarAllanzp Date: Tue, 30 Jan 2018 18:02:12 +0800 Subject: [PATCH 014/156] Chinese translation at section 'Greedy vs lazy matching'. --- README-cn.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README-cn.md b/README-cn.md index 5899a10a..f31fdf7c 100644 --- a/README-cn.md +++ b/README-cn.md @@ -472,6 +472,21 @@ [在线练习](https://regex101.com/r/E88WE2/1) +### 6. 贪婪匹配与惰性匹配 (Greedy vs lazy matching) + +正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 `?` 将贪婪匹配模式转化为惰性匹配模式。 + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ +[在线练习](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[在线练习](https://regex101.com/r/AyAdgJ/2) + ## 贡献 * 报告问题 From 9ed1a20b215c7621b54018c1e4e589dc35980805 Mon Sep 17 00:00:00 2001 From: "yeongjun.kim" Date: Fri, 16 Mar 2018 15:30:41 +0900 Subject: [PATCH 015/156] Translate 'Greedy vs lazy matching' into korean --- README-ko.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README-ko.md b/README-ko.md index e3029d0f..413c5a0b 100644 --- a/README-ko.md +++ b/README-ko.md @@ -59,6 +59,7 @@ - [대소문자 구분없음](#51-대소문자-구분없음) - [전체 검색](#52-전체-검색) - [멀티 라인](#53-멀티-라인) + - [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른 매칭) ## 1. 기본 매쳐 @@ -401,6 +402,22 @@ [Test the regular expression](https://regex101.com/r/E88WE2/1) +## 6. 탐욕적 vs 게으른 매칭 +기본적으로 정규 표현식은 탐욕적(greedy) 매칭을 수행하는데, 이는 가능한 한 길게 매칭하는 것을 의미한다. +우리는 `?`를 사용하여 게으른(lazy) 방법 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다. + +
+"/(.*at)/" => The fat cat sat on the mat. 
+
+ +[Test the regular expression](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+
+ +[Test the regular expression](https://regex101.com/r/AyAdgJ/2) + ## 기여 방법 * 이슈 리포팅 From eed5d788230e8b9eaff92d3c5eb08e8cf40517e5 Mon Sep 17 00:00:00 2001 From: "yeongjun.kim" Date: Fri, 16 Mar 2018 17:08:22 +0900 Subject: [PATCH 016/156] Fix toc link - fix incorrectly link in toc - modify sentence in section 6 --- README-ko.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README-ko.md b/README-ko.md index 413c5a0b..02678b22 100644 --- a/README-ko.md +++ b/README-ko.md @@ -59,7 +59,7 @@ - [대소문자 구분없음](#51-대소문자-구분없음) - [전체 검색](#52-전체-검색) - [멀티 라인](#53-멀티-라인) - - [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른 매칭) +- [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른-매칭) ## 1. 기본 매쳐 @@ -404,7 +404,7 @@ ## 6. 탐욕적 vs 게으른 매칭 기본적으로 정규 표현식은 탐욕적(greedy) 매칭을 수행하는데, 이는 가능한 한 길게 매칭하는 것을 의미한다. -우리는 `?`를 사용하여 게으른(lazy) 방법 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다. +우리는 `?`를 사용하여 게으른(lazy) 방법으로 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다.
 "/(.*at)/" => The fat cat sat on the mat. 

From 0d20c325e5f0b907b8ca32330664914ac15edebf Mon Sep 17 00:00:00 2001
From: webber 
Date: Tue, 27 Mar 2018 19:30:57 +0200
Subject: [PATCH 017/156] Add more context to (non) capturing groups

Changed 2.5 to reflect the following changes:

- Character group is now named capturing group
- Capturing group is given proper context of its usage (initial text)
- Non-capturing group is now described as per #16.
---
 README.md | 33 +++++++++++++++++++++++++++------
 1 file changed, 27 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index ffd6e9c4..9b36ad19 100644
--- a/README.md
+++ b/README.md
@@ -263,14 +263,14 @@ regular expression `[0-9]{3}` means: Match exactly 3 digits.
 
 [Test the regular expression](https://regex101.com/r/Sivu30/1)
 
-## 2.5 Character Group
+## 2.5 Capturing Group
 
-Character group is a group of sub-patterns that is written inside Parentheses `(...)`.
-As we discussed before that in regular expression if we put a quantifier after a
-character then it will repeat the preceding character. But if we put quantifier
-after a character group then it repeats the whole character group. For example,
+A capturing group is a group of sub-patterns that is written inside Parentheses 
+`(...)`. Like As we discussed before that in regular expression if we put a quantifier 
+after a character then it will repeat the preceding character. But if we put quantifier
+after a capturing group then it repeats the whole capturing group. For example,
 the regular expression `(ab)*` matches zero or more repetitions of the character
-"ab". We can also use the alternation `|` meta character inside character group.
+"ab". We can also use the alternation `|` meta character inside capturing group.
 For example, the regular expression `(c|g|p)ar` means: lowercase character `c`,
 `g` or `p`, followed by character `a`, followed by character `r`.
 
@@ -280,6 +280,27 @@ For example, the regular expression `(c|g|p)ar` means: lowercase character `c`,
 
 [Test the regular expression](https://regex101.com/r/tUxrBG/1)
 
+Note that capturing groups do not only match but also capture the characters for use in 
+the parent language. The parent language could be python or javascript or virtually any
+language that implements regular expressions in a function definition.
+
+### 2.5.1 Non-capturing group
+
+A non-capturing group is a capturing group that only matches the characters, but 
+does not capture the group. A non-capturing group is denoted by a `?` followed by a `:` 
+within parenthesis `(...)`. For example, the regular expression `(?:c|g|p)ar` is similar to 
+`(c|g|p)ar` in that it matches the same characters but will not create a capture group.
+
+
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/Rm7Me8/1) + +Non-capturing groups can come in handy when used in find-and-replace functionality or +when mixed with capturing groups to keep the overview when producing any other kind of output. +See also [4. Lookaround](# 4. Lookaround). + ## 2.6 Alternation In regular expression Vertical bar `|` is used to define alternation. From 3142822931c86ee8fa68e639399353d6d3492bb2 Mon Sep 17 00:00:00 2001 From: Josh Byster <8664074+josh-byster@users.noreply.github.com> Date: Sat, 23 Jun 2018 00:03:22 -0500 Subject: [PATCH 018/156] Clarified alternation --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 9b36ad19..e4d3561b 100644 --- a/README.md +++ b/README.md @@ -303,15 +303,16 @@ See also [4. Lookaround](# 4. Lookaround). ## 2.6 Alternation -In regular expression Vertical bar `|` is used to define alternation. -Alternation is like a condition between multiple expressions. Now, you may be +In a regular expression, the vertical bar `|` is used to define alternation. +Alternation is like an OR statement between multiple expressions. Now, you may be thinking that character set and alternation works the same way. But the big difference between character set and alternation is that character set works on character level but alternation works on expression level. For example, the -regular expression `(T|t)he|car` means: uppercase character `T` or lowercase -`t`, followed by lowercase character `h`, followed by lowercase character `e` or -lowercase character `c`, followed by lowercase character `a`, followed by -lowercase character `r`. +regular expression `(T|t)he|car` means: either (uppercase character `T` or lowercase +`t`, followed by lowercase character `h`, followed by lowercase character `e`) OR +(lowercase character `c`, followed by lowercase character `a`, followed by +lowercase character `r`). Note that I put the parentheses for clarity, to show that either expression +in parentheses can be met and it will match.
 "(T|t)he|car" => The car is parked in the garage.

From da41a9d2970d7b7e57fd2c923f5ffa2721205f76 Mon Sep 17 00:00:00 2001
From: Zeeshan Ahmad 
Date: Mon, 16 Jul 2018 17:29:33 +0400
Subject: [PATCH 019/156] Revert "Fix toc link"

---
 README-ko.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README-ko.md b/README-ko.md
index c5016322..a740acfd 100644
--- a/README-ko.md
+++ b/README-ko.md
@@ -60,7 +60,7 @@
   - [대소문자 구분없음](#51-대소문자-구분없음)
   - [전체 검색](#52-전체-검색)
   - [멀티 라인](#53-멀티-라인)
-- [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른-매칭)
+ - [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른 매칭)
 
 ## 1. 기본 매쳐
 
@@ -405,7 +405,7 @@
 
 ## 6. 탐욕적 vs 게으른 매칭
 기본적으로 정규 표현식은 탐욕적(greedy) 매칭을 수행하는데, 이는 가능한 한 길게 매칭하는 것을 의미한다. 
-우리는 `?`를 사용하여 게으른(lazy) 방법으로 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다.
+우리는 `?`를 사용하여 게으른(lazy) 방법 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다.
 
 
 "/(.*at)/" => The fat cat sat on the mat. 

From e11b2c9134403f5a77a348df06f4e658c4f17769 Mon Sep 17 00:00:00 2001
From: Zeeshan Ahmad 
Date: Fri, 28 Sep 2018 23:31:05 +0400
Subject: [PATCH 020/156] Fix typos

---
 .gitignore          | 1 +
 LICENSE             | 2 +-
 README-cn.md        | 2 +-
 README-es.md        | 2 +-
 README-fr.md        | 2 +-
 README-gr.md        | 2 +-
 README-hu.md        | 2 +-
 README-ja.md        | 2 +-
 README-ko.md        | 2 +-
 README-pl.md        | 2 +-
 README-pt_BR.md     | 2 +-
 README-tr.md        | 2 +-
 README-zh-simple.md | 2 +-
 README.md           | 2 +-
 14 files changed, 14 insertions(+), 13 deletions(-)
 create mode 100644 .gitignore

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..600d2d33
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.vscode
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 78bf0689..de523bdf 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2017 Zeeshan Ahmed
+Copyright (c) 2017 Zeeshan Ahmad
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README-cn.md b/README-cn.md
index 2d996cb1..e1e4eb5e 100644
--- a/README-cn.md
+++ b/README-cn.md
@@ -497,4 +497,4 @@
 
 ## 许可证
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-es.md b/README-es.md
index 19d5e5a8..8026ee5d 100644
--- a/README-es.md
+++ b/README-es.md
@@ -467,4 +467,4 @@ el motor de expresión regular coincide con el patrón al final de cada línea d
 
 ## Licencia
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-fr.md b/README-fr.md
index 2af7fe25..e0354beb 100644
--- a/README-fr.md
+++ b/README-fr.md
@@ -468,4 +468,4 @@ Grâce au drapeau `m` maintenant le moteur d'expression régulière trouve le sc
 
 ## License
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-gr.md b/README-gr.md
index 30da6a4b..b480e9a3 100644
--- a/README-gr.md
+++ b/README-gr.md
@@ -551,4 +551,4 @@ string με βάση κάποιου μοτίβου αναζήτησης και 
 
 ## License
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-hu.md b/README-hu.md
index 92a57fb9..770a61f3 100644
--- a/README-hu.md
+++ b/README-hu.md
@@ -534,4 +534,4 @@ végéig keres illeszkedést.
 
 ## Licenc
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-ja.md b/README-ja.md
index bdfec3a4..b5ed321a 100644
--- a/README-ja.md
+++ b/README-ja.md
@@ -520,4 +520,4 @@
 
 ## ライセンス
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-ko.md b/README-ko.md
index a740acfd..777c76d6 100644
--- a/README-ko.md
+++ b/README-ko.md
@@ -428,4 +428,4 @@
 
 ## 라이센스
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-pl.md b/README-pl.md
index 28622c42..a5ef17c0 100644
--- a/README-pl.md
+++ b/README-pl.md
@@ -530,4 +530,4 @@ I ponieważ użyliśmy flagi `m` dopasowywane będą wzorce na końcu każdej li
 
 ## Licencja
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-pt_BR.md b/README-pt_BR.md
index e1f6df7a..0942e5c3 100644
--- a/README-pt_BR.md
+++ b/README-pt_BR.md
@@ -410,4 +410,4 @@ O modificador `m` é usado para realizar uma busca em várias linhas. Como falam
 
 ## Licença
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-tr.md b/README-tr.md
index 1dfbf7c6..fe40116b 100644
--- a/README-tr.md
+++ b/README-tr.md
@@ -478,4 +478,4 @@ Negative Lookbehind, belirli bir desenden önce olmayan eşleşmeleri almak içi
 
 ## License
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README-zh-simple.md b/README-zh-simple.md
index 2ae80013..83de5b82 100644
--- a/README-zh-simple.md
+++ b/README-zh-simple.md
@@ -485,4 +485,4 @@
 
 ## 许可证
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
diff --git a/README.md b/README.md
index e4d3561b..6f52a703 100644
--- a/README.md
+++ b/README.md
@@ -590,4 +590,4 @@ possible. we can use `?` to match in lazy way means as short as possible
 
 ## License
 
-MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)

From 6909472cd391d8add49f7e7db8759ac0fb29a803 Mon Sep 17 00:00:00 2001
From: BigBadJohn562 <44328380+BigBadJohn562@users.noreply.github.com>
Date: Mon, 22 Oct 2018 11:03:20 -0700
Subject: [PATCH 021/156] Wording and Sentence Structure Changes

---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 6f52a703..89844ef4 100644
--- a/README.md
+++ b/README.md
@@ -22,10 +22,10 @@
 > Regular expression is a group of characters or symbols which is used to find a specific pattern from a text.
 
 A regular expression is a pattern that is matched against a subject string from
-left to right. The word "Regular expression" is a mouthful, you will usually
-find the term abbreviated as "regex" or "regexp". Regular expression is used for
-replacing a text within a string, validating form, extract a substring from a
-string based upon a pattern match, and so much more.
+left to right. Regular expression is used for replacing a text within a string, 
+validating form, extract a substring from a string based upon a pattern match, 
+and so much more. The word "Regular expression" is a mouthful, so you will usually
+find the term abbreviated as "regex" or "regexp". 
 
 Imagine you are writing an application and you want to set the rules for when a
 user chooses their username. We want to allow the username to contain letters,

From 780ab9bd69bd36676cc501da503e414a3cd5c10f Mon Sep 17 00:00:00 2001
From: Lucky Ozoka 
Date: Mon, 26 Nov 2018 21:30:35 +0100
Subject: [PATCH 022/156] Replace lookaheads with lookarounds in definition of
 lookarounds

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6f52a703..5daf25dc 100644
--- a/README.md
+++ b/README.md
@@ -409,7 +409,7 @@ shorthand character sets are as follows:
 
 Lookbehind and lookahead (also called lookaround) are specific types of
 ***non-capturing groups*** (Used to match the pattern but not included in matching
-list). Lookaheads are used when we have the condition that this pattern is
+list). Lookarounds are used when we have the condition that this pattern is
 preceded or followed by another certain pattern. For example, we want to get all
 numbers that are preceded by `$` character from the following input string
 `$4.44 and $10.88`. We will use following regular expression `(?<=\$)[0-9\.]*`

From 38354692cfddae7540686542c47c7e331ccf4307 Mon Sep 17 00:00:00 2001
From: Zeeshan Ahmad 
Date: Sat, 12 Jan 2019 21:24:11 +0400
Subject: [PATCH 023/156] Put links inside header

---
 README-cn.md        | 18 +++++++++++++++---
 README-es.md        | 18 +++++++++++++++---
 README-fr.md        | 18 +++++++++++++++---
 README-gr.md        | 18 +++++++++++++++---
 README-hu.md        | 18 +++++++++++++++---
 README-ja.md        | 18 +++++++++++++++---
 README-ko.md        | 18 +++++++++++++++---
 README-pl.md        | 18 +++++++++++++++---
 README-pt_BR.md     | 18 +++++++++++++++---
 README-tr.md        | 18 +++++++++++++++---
 README-zh-simple.md | 18 +++++++++++++++---
 README.md           | 17 ++++++++++++++---
 12 files changed, 179 insertions(+), 36 deletions(-)

diff --git a/README-cn.md b/README-cn.md
index e1e4eb5e..c710fc61 100644
--- a/README-cn.md
+++ b/README-cn.md
@@ -1,7 +1,19 @@
-

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## 翻译: diff --git a/README-es.md b/README-es.md index 8026ee5d..d9eb4260 100644 --- a/README-es.md +++ b/README-es.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## Traducciones: diff --git a/README-fr.md b/README-fr.md index e0354beb..f102e8f5 100644 --- a/README-fr.md +++ b/README-fr.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## Traductions: diff --git a/README-gr.md b/README-gr.md index b480e9a3..b8dd12fa 100644 --- a/README-gr.md +++ b/README-gr.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## Μεταφράσεις: diff --git a/README-hu.md b/README-hu.md index 770a61f3..ff9e09f2 100644 --- a/README-hu.md +++ b/README-hu.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## Fordítások: diff --git a/README-ja.md b/README-ja.md index b5ed321a..81ac7324 100644 --- a/README-ja.md +++ b/README-ja.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## 翻訳 diff --git a/README-ko.md b/README-ko.md index 777c76d6..448f8d1b 100644 --- a/README-ko.md +++ b/README-ko.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## 번역: diff --git a/README-pl.md b/README-pl.md index a5ef17c0..f4064b43 100644 --- a/README-pl.md +++ b/README-pl.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## Tłumaczenia: diff --git a/README-pt_BR.md b/README-pt_BR.md index 0942e5c3..eff3549a 100644 --- a/README-pt_BR.md +++ b/README-pt_BR.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## Traduções: diff --git a/README-tr.md b/README-tr.md index fe40116b..308e41fd 100644 --- a/README-tr.md +++ b/README-tr.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## Çeviriler: diff --git a/README-zh-simple.md b/README-zh-simple.md index 83de5b82..e88116a3 100644 --- a/README-zh-simple.md +++ b/README-zh-simple.md @@ -1,7 +1,19 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

+ ## 什么是正则表达式? diff --git a/README.md b/README.md index 5daf25dc..e7590922 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,18 @@ -

-Learn Regex -


+
+ + Learn Regex + +

+

+ + + + + + +

+

## Translations: From 19170f71fad77eab5db74b72bd6876ec06526ef2 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 21:27:58 +0400 Subject: [PATCH 024/156] Update year inside LICENSE.md --- LICENSE.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..5171fedf --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Zeeshan Ahmad + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From a2bf72bfb8376e6a98c78393d1720041a6fafd59 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 21:28:40 +0400 Subject: [PATCH 025/156] Put .DS_Store inside .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 600d2d33..0f971a30 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.vscode \ No newline at end of file +.vscode +.DS_STORE \ No newline at end of file From 9e2ac646bba0ea3bb128a34a284303ec0812d08d Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 21:29:02 +0400 Subject: [PATCH 026/156] Move translations md files to translations directory --- LICENSE | 21 ------------------- README-cn.md => translations/README-cn.md | 0 README-es.md => translations/README-es.md | 0 README-fr.md => translations/README-fr.md | 0 README-gr.md => translations/README-gr.md | 0 README-hu.md => translations/README-hu.md | 0 README-ja.md => translations/README-ja.md | 0 README-ko.md => translations/README-ko.md | 0 README-pl.md => translations/README-pl.md | 0 .../README-pt_BR.md | 0 README-tr.md => translations/README-tr.md | 0 .../README-zh-simple.md | 0 12 files changed, 21 deletions(-) delete mode 100644 LICENSE rename README-cn.md => translations/README-cn.md (100%) rename README-es.md => translations/README-es.md (100%) rename README-fr.md => translations/README-fr.md (100%) rename README-gr.md => translations/README-gr.md (100%) rename README-hu.md => translations/README-hu.md (100%) rename README-ja.md => translations/README-ja.md (100%) rename README-ko.md => translations/README-ko.md (100%) rename README-pl.md => translations/README-pl.md (100%) rename README-pt_BR.md => translations/README-pt_BR.md (100%) rename README-tr.md => translations/README-tr.md (100%) rename README-zh-simple.md => translations/README-zh-simple.md (100%) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index de523bdf..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Zeeshan Ahmad - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README-cn.md b/translations/README-cn.md similarity index 100% rename from README-cn.md rename to translations/README-cn.md diff --git a/README-es.md b/translations/README-es.md similarity index 100% rename from README-es.md rename to translations/README-es.md diff --git a/README-fr.md b/translations/README-fr.md similarity index 100% rename from README-fr.md rename to translations/README-fr.md diff --git a/README-gr.md b/translations/README-gr.md similarity index 100% rename from README-gr.md rename to translations/README-gr.md diff --git a/README-hu.md b/translations/README-hu.md similarity index 100% rename from README-hu.md rename to translations/README-hu.md diff --git a/README-ja.md b/translations/README-ja.md similarity index 100% rename from README-ja.md rename to translations/README-ja.md diff --git a/README-ko.md b/translations/README-ko.md similarity index 100% rename from README-ko.md rename to translations/README-ko.md diff --git a/README-pl.md b/translations/README-pl.md similarity index 100% rename from README-pl.md rename to translations/README-pl.md diff --git a/README-pt_BR.md b/translations/README-pt_BR.md similarity index 100% rename from README-pt_BR.md rename to translations/README-pt_BR.md diff --git a/README-tr.md b/translations/README-tr.md similarity index 100% rename from README-tr.md rename to translations/README-tr.md diff --git a/README-zh-simple.md b/translations/README-zh-simple.md similarity index 100% rename from README-zh-simple.md rename to translations/README-zh-simple.md From 26a602c535afd7cd820733deabe0ac9619de6b53 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 21:48:59 +0400 Subject: [PATCH 027/156] Update readme links --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e7590922..7fea7021 100644 --- a/README.md +++ b/README.md @@ -16,17 +16,17 @@ ## Translations: -* [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) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [English](translations/README.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## What is Regular Expression? From 89a8d7ed0536c761361eedf193f84ce7ef6c9f04 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 21:50:04 +0400 Subject: [PATCH 028/156] Update readme link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7fea7021..368ea626 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ ## Translations: -* [English](translations/README.md) +* [English](README.md) * [Español](translations/README-es.md) * [Français](translations/README-fr.md) * [Português do Brasil](translations/README-pt_BR.md) From 082750a4fe7b22b9a2869929254f9c8ca77e25b5 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 21:52:43 +0400 Subject: [PATCH 029/156] Update readme links --- translations/README-cn.md | 19 ++++++++++--------- translations/README-es.md | 20 ++++++++++---------- translations/README-fr.md | 19 ++++++++++--------- translations/README-gr.md | 20 ++++++++++---------- translations/README-hu.md | 19 ++++++++++--------- translations/README-ja.md | 19 ++++++++++--------- translations/README-ko.md | 19 ++++++++++--------- translations/README-pl.md | 19 ++++++++++--------- translations/README-pt_BR.md | 19 ++++++++++--------- translations/README-tr.md | 19 ++++++++++--------- translations/README-zh-simple.md | 13 +++++++++++++ 11 files changed, 113 insertions(+), 92 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index c710fc61..c765fc54 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -18,15 +18,16 @@ ## 翻译: * [English](README.md) -* [Español](README-es.md) -* [Français](README-fr.md) -* [中文版](README-cn.md) -* [日本語](README-ja.md) -* [한국어](README-ko.md) -* [Turkish](README-tr.md) -* [Greek](README-gr.md) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## 什么是正则表达式? diff --git a/translations/README-es.md b/translations/README-es.md index d9eb4260..ff25d406 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -18,16 +18,16 @@ ## 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) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## 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. diff --git a/translations/README-fr.md b/translations/README-fr.md index f102e8f5..271a1326 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -18,15 +18,16 @@ ## Traductions: * [English](README.md) -* [Español](README-es.md) -* [Français](README-fr.md) -* [中文版](README-cn.md) -* [日本語](README-ja.md) -* [한국어](README-ko.md) -* [Turkish](README-tr.md) -* [Greek](README-gr.md) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## Qu'est-ce qu'une expression régulière? diff --git a/translations/README-gr.md b/translations/README-gr.md index b8dd12fa..3a906d0d 100644 --- a/translations/README-gr.md +++ b/translations/README-gr.md @@ -18,16 +18,16 @@ ## Μεταφράσεις: * [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) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## Τι είναι μια Κανονική Έκφραση (Regular Expression); diff --git a/translations/README-hu.md b/translations/README-hu.md index ff9e09f2..ee1e552f 100644 --- a/translations/README-hu.md +++ b/translations/README-hu.md @@ -18,15 +18,16 @@ ## Fordítások: * [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) -* [Magyar](README-hu.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## Mi az a reguláris kifejezés? diff --git a/translations/README-ja.md b/translations/README-ja.md index 81ac7324..3269fea5 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -18,15 +18,16 @@ ## 翻訳 * [English](README.md) -* [Español](README-es.md) -* [Français](README-fr.md) -* [中文版](README-cn.md) -* [日本語](README-ja.md) -* [한국어](README-ko.md) -* [Turkish](README-tr.md) -* [Greek](README-gr.md) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## 正規表現とは diff --git a/translations/README-ko.md b/translations/README-ko.md index 448f8d1b..a13eeb43 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -18,15 +18,16 @@ ## 번역: * [English](README.md) -* [Español](README-es.md) -* [Français](README-fr.md) -* [中文版](README-cn.md) -* [日本語](README-ja.md) -* [한국어](README-ko.md) -* [Turkish](README-tr.md) -* [Greek](README-gr.md) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## 정규표현식이란 무엇인가? diff --git a/translations/README-pl.md b/translations/README-pl.md index f4064b43..2a7d387b 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -18,15 +18,16 @@ ## Tłumaczenia: * [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) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## Co to jest wyrażenie regularne? diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md index eff3549a..2a7ed8f4 100644 --- a/translations/README-pt_BR.md +++ b/translations/README-pt_BR.md @@ -18,15 +18,16 @@ ## Traduções: * [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) -* [Greek](README-gr.md) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## O que é uma Expressão Regular? diff --git a/translations/README-tr.md b/translations/README-tr.md index 308e41fd..b935359f 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -18,15 +18,16 @@ ## Çeviriler: * [English](README.md) -* [Español](README-es.md) -* [Français](README-fr.md) -* [中文版](README-cn.md) -* [日本語](README-ja.md) -* [한국어](README-ko.md) -* [Turkish](README-tr.md) -* [Greek](README-gr.md) -* [Magyar](README-hu.md) -* [Polish](README-pl.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## Düzenli İfade Nedir? diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index e88116a3..708371d2 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -14,6 +14,19 @@

+## Translations: + +* [English](README.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) ## 什么是正则表达式? From 3ad593b82aaba9274b28adff169cc2669ef51a5f Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 21:56:24 +0400 Subject: [PATCH 030/156] Add how-to.md file --- translations/how-to.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 translations/how-to.md diff --git a/translations/how-to.md b/translations/how-to.md new file mode 100644 index 00000000..91b6081d --- /dev/null +++ b/translations/how-to.md @@ -0,0 +1,9 @@ +Please put new translation README files here. + +To start a new translation, please: + +1. Make an issue (for collaboration with other translators) +2. Make a pull request to collaborate and commit to. +3. Let me know when it's ready to pull. + +Thank you! \ No newline at end of file From 99e40a2bdd777c1b4d5957666fa12d6682e69762 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 21:57:58 +0400 Subject: [PATCH 031/156] Add regex svg file --- img/regexp.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/img/regexp.svg b/img/regexp.svg index 50ea7c7a..46d9f188 100644 --- a/img/regexp.svg +++ b/img/regexp.svg @@ -55,7 +55,7 @@ regexp - https://github.com/zeeshanu/learn-regex + https://github.com/ziishaned/learn-regex ponsfrilus From b00833c815d903cc4b5e1be7a47e21c67f8cfb18 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 22:02:51 +0400 Subject: [PATCH 032/156] Update contribution section --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 368ea626..d0712bbe 100644 --- a/README.md +++ b/README.md @@ -594,10 +594,10 @@ possible. we can use `?` to match in lazy way means as short as possible ## Contribution -* Report issues * Open pull request with improvements +* Discuss ideas in issues * Spread the word -* Reach out to me directly at ziishaned@gmail.com or [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) +* Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) ## License From a43006b5624c0bd361dde7169e727dd4cc1e209a Mon Sep 17 00:00:00 2001 From: "Yeongjun.Kim" Date: Mon, 28 Jan 2019 11:59:43 +0900 Subject: [PATCH 033/156] Update README-ko --- translations/README-ko.md | 116 +++++++++++++++++++++----------------- 1 file changed, 65 insertions(+), 51 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index a13eeb43..ee7abdcf 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -57,7 +57,8 @@ - [덧셈 부호](#232-덧셈-부호) - [물음표](#233-물음표) - [중괄호](#24-중괄호) - - [문자 그룹](#25-문자-그룹) + - [캡쳐링 그룹](#25-캡쳐-그룹) + - [논-캡쳐링 그룹](#251-논-캡쳐링-그룹) - [대안 부호](#26-대안-부호) - [특수 문자 이스케이핑](#27-특수-문자-이스케이핑) - [앵커 부호](#28-앵커-부호) @@ -73,7 +74,7 @@ - [대소문자 구분없음](#51-대소문자-구분없음) - [전체 검색](#52-전체-검색) - [멀티 라인](#53-멀티-라인) - - [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른 매칭) +- [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른 매칭) ## 1. 기본 매쳐 @@ -95,23 +96,22 @@ ## 2. 메타 문자 -메타 문자들은 정규 표현식의 빌딩 블락들이다. 메타 문자들은 자체적인 의미를 가지지 않고 특별한 방식으로 해석되어진다. 어떤 메타 문자열들은 특별한 의미를 가지며 대괄호안에서 쓰인다. -아래는 이러한 메타 문자열들이다: - -|메타 문자|설명| -|:----:|----| -|.|온점(Period)는 줄바꿈을 제외한 어떤 종류의 단일 문자와 매치.| -|[ ]|문자 클래스. 대괄호 사이에 있는 문자들로 매치.| -|[^ ]|부정 문자 클래스. 대괄호 안에 포함되지 않은 모든 문자들로 매치.| -|*|이 메타 문자의 바로 앞에 있는 심볼이 0번 이상 반복된 문자들과 매치.| -|+|이 메타 문자의 바로 앞에 있는 심볼이 한번 이상 반복된 문자들과 매치.| -|?|이 메타 문자의 바로 앞에 있는 심볼을 선택적(optional)으로 만듬.| -|{n,m}|중괄호. 이 메타 문자의 바로 앞에 위치한 심볼이 최소 n번 최대 m번의 반복된 문자들과 매치.| -|(xyz)|문자 그룹. 문자열 xyz와 정확히 같은 순서를 가진 문자들과 매치.| -|||대안. 문자가 이 메타 문자의 앞에 있는 심볼이거나 뒤에 있는 심볼이면 매치.| -|\|다음 문자 이스케이프(Escape). 예약된 문자열들 [ ] ( ) { } . * + ? ^ $ \ |을 이스케이핑함으로써 그 자체와 매칭되는 것을 허용.| -|^|입력의 시작과 매치.| -|$|입력의 끝과 매치.| +메타 문자들은 정규 표현식의 빌딩 블락들이다. 메타 문자들은 자체적인 의미를 가지지 않고 특별한 방식으로 해석되어진다. 어떤 메타 문자열들은 특별한 의미를 가지며 대괄호안에서 쓰인다. 아래는 이러한 메타 문자열들이다: + +| 메타 문자 | 설명 | +|:----:| ----| +| . | 온점(Period)는 줄바꿈을 제외한 어떤 종류의 단일 문자와 매치.| +| [ ] | 문자 클래스. 대괄호 사이에 있는 문자들로 매치.| +| [^ ] | 부정 문자 클래스. 대괄호 안에 포함되지 않은 모든 문자들로 매치.| +| \* | 이 메타 문자의 바로 앞에 있는 심볼이 0번 이상 반복된 문자들과 매치.| +| + | 이 메타 문자의 바로 앞에 있는 심볼이 한번 이상 반복된 문자들과 매치.| +| ? | 이 메타 문자의 바로 앞에 있는 심볼을 선택적(optional)으로 만듬.| +| {n,m} | 중괄호. 이 메타 문자의 바로 앞에 위치한 심볼이 최소 n번 최대 m번의 반복된 문자들과 매치.| +| (xyz) | 문자 그룹. 문자열 xyz와 정확히 같은 순서를 가진 문자들과 매치.| +| | | 대안. 문자가 이 메타 문자의 앞에 있는 심볼이거나 뒤에 있는 심볼이면 매치.| +| \| 다음 문자 이스케이프(Escape). 예약된 문자열들 [ ] ( ) { } . \* + ? ^ \$ \ |을 이스케이핑함으로써 그 자체와 매칭되는 것을 허용.| +| ^ | 입력의 시작과 매치.| +| \$ | 입력의 끝과 매치.| ## 2.1 마침표 @@ -176,7 +176,7 @@ ### 2.3.2 덧셈 부호 `+` 부호는 부호 앞에 위치한 문자가 한번 이상 반복되는 패턴을 만드는데 사용된다. 예를 들어, 정규 표현식 `c.+t`는 소문자 `c`가 나오고, 그 뒤에 한개 이상의 문자가 나온 후, 소문자 `t`가 나오는 패턴을 의미한다. 여기서 문자 `t`는 해당 문장의 제일 마지막 글자 `t`라는것을 명확히할 필요가 있다. - w +
 "c.+t" => The fat cat sat on the mat.
 
@@ -201,7 +201,7 @@ ## 2.4 중괄호 -정규 표현식에서 정량자(quantifier)라고도 불리는 중괄호는 하나의 문자 혹은 문자 집합으로 표시된 문자가 몇번 반복되는지 명시하는데 사용된다. 예를 들어, 정규 표현식 `[0-9]{2,3}`은 숫자 문자(0부터 9사이의 문자)가 최소 2번, 최대 3번 연속해서 나오는 문자열 패턴을 의미한다. +정규 표현식에서 정량자(quantifier)라고도 불리는 중괄호는 하나의 문자 혹은 문자 집합으로 표시된 문자가 몇번 반복되는지명시하는데 사용된다. 예를 들어, 정규 표현식 `[0-9]{2,3}`은 숫자 문자(0부터 9사이의 문자)가 최소 2번, 최대 3번 연속해서 나오는 문자열 패턴을 의미한다.
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -223,9 +223,9 @@
 
 [Test the regular expression](https://regex101.com/r/Sivu30/1)
 
-## 2.5 문자 그룹
+## 2.5 캡쳐링 그룹
 
-문자 그룹은 괄호 `(...)` 안에 쓰여진 하위 패턴들의 그룹이다. 위에서 논의했듯이, 정규 표현식에서 하나의 문자 뒤에 정량자(quantifier)를 넣는 경우에는 해당 문자의 반복을 나타낸다. 하지만, 만약 하나의 문자 그룹 뒤에 정량자를 넣는 경우에는 문자 그룹 전체의 반복을 나타내게 된다. 예를 들어, 정규 표현식 `(ab)*`는 문자 "ab"가 0번 이상 반복되는 패턴을 의미한다. 대안 부호인 `|` 또한 문자 그룹 내부에서 사용할 수 있다. 예를 들어, 정규 표현식 `(c|g|p)ar`은 소문자 `c`, `g` 혹은 `p`가 나온 이후에 문자 `a`가 나오고 그 뒤에 문자 `r`이 나오는 패턴을 의미한다.
+캡쳐링 그룹은 괄호 `(...)` 안에 쓰여진 하위 패턴들의 그룹이다. 위에서 논의했듯이, 정규 표현식에서 하나의 문자 뒤에 정량자(quantifier)를 넣는 경우에는 해당 문자의 반복을 나타낸다. 하지만, 만약 하나의 캡쳐링 그룹 뒤에 정량자를 넣는 경우에는 캡쳐링 그룹 전체의 반복을 나타내게 된다. 예를 들어, 정규 표현식 `(ab)*`는 문자 "ab"가 0번 이상 반복되는 패턴을 의미한다. 대안 부호인 `|` 또한 문자 그룹 내부에서 사용할 수 있다. 예를 들어, 정규 표현식 `(c|g|p)ar`은 소문자 `c`, `g` 혹은 `p`가 나온 이후에 문자 `a`가 나오고 그 뒤에 문자 `r`이 나오는 패턴을 의미한다.
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -233,6 +233,20 @@
 
 [Test the regular expression](https://regex101.com/r/tUxrBG/1)
 
+캡처링 그룹은 부모 언어에서 사용하기 위해 문자를 일치시킬뿐만 아니라 문자를 캡처한다는 점에 유의해야 한다. 부모 언어는 파이썬이나 자바 스크립트 또는 함수 정의에서 정규 표현식을 구현하는 거의 모든 언어가 될 수 있다.
+
+### 2.5.1 논-캡쳐링 그룹
+
+논-캡쳐링 그룹은 오직 문자열에 매칭되지만, 그룹을 캡쳐하지 않는 캡쳐링 그룹이다. 논-캡쳐링 그룹은 `(...)` 괄호안에 `?:` 로 표시된다. 예를 들어 정규식 `(?:c|g|p)ar` 는 `(c|g|p)ar`와 같은 문자열을 매칭하는 것에서 유사하지만, 캡쳐링 그룹을 만들지 않는다.
+
+
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/Rm7Me8/1) + +논-캡처링 그룹은 찾기 및 변경 기능에서 사용하거나 캡처 그룹 함께 사용하여 다른 종류의 출력 생성시 overview를 유지할 때 유용하다. 또한 [4. 전후방탐색](#4-전후방탐색)를 보아라. + ## 2.6 대안 부호 정규 표현식에서 수직 막대 부호 `|`는 대안을 정의하는데 사용된다. 대안 부호는 여러개의 표현식들 사이의 조건과도 같다. 지금쯤 당신은 문자 집합(Character set)과 대안 부호가 동일하게 동작한다고 생각하고 있을 것이다. 하지만, 문자 집합과 대안 부호 사이의 가장 큰 차이점은 문자 집합은 문자 수준에서 동작하는 반면, 대안 부호는 표현식 수준에서 동작한다는 것이다. 예를 들어, 정규 표현식 `(T|t)he|car`는 대문자 `T` 혹은 소문자 `t`가 나오고 문자 `h`, 문자 `e`가 차례로 나오거나 문자 `c`, 문자 `a`, 문자 `r`이 차례로 나오는 패턴을 의미한다. @@ -293,26 +307,26 @@ 정규 표현식은 일반적으로 사용되는 문자열 집합들을 간편하게 사용할 수 있도록 여러 단축형들을 제공한다. 단축형 문자열 집합은 아래와 같다. -|단축형|설명| -|:----:|----| -|.|개행을 제외한 모든 문자| -|\w|영숫자 문자와 매치: `[a-zA-Z0-9_]`| -|\W|영숫자 문자가 아닌 문자와 매치: `[^\w]`| -|\d|숫자와 매치: `[0-9]`| -|\D|숫자가 아닌 문자와 매치: `[^\d]`| -|\s|공백 문자와 매치: `[\t\n\f\r\p{Z}]`| -|\S|공백 문자가 아닌 문자와 매치: `[^\s]`| +| 단축형 | 설명 | +| :----: | --------------------------------------- | +| . | 개행을 제외한 모든 문자 | +| \w | 영숫자 문자와 매치: `[a-zA-Z0-9_]` | +| \W | 영숫자 문자가 아닌 문자와 매치: `[^\w]` | +| \d | 숫자와 매치: `[0-9]` | +| \D | 숫자가 아닌 문자와 매치: `[^\d]` | +| \s | 공백 문자와 매치: `[\t\n\f\r\p{Z}]` | +| \S | 공백 문자가 아닌 문자와 매치: `[^\s]` | ## 4. 전후방탐색 -때때로 전후방탐색Lookaround이라고 알려진 후방탐색Lookbehind과 전방탐색Lookahead은 (패턴 매칭을 위해서 사용되지만 매칭된 리스트에는 포함되지 않는) ***넌-캡쳐링 그룹*** 의 특정 종류들이다. 전후방탐색은 하나의 패턴이 다른 특정 패턴 전이나 후에 나타나는 조건을 가지고 있을때 사용한다. 예를 들어, 우리가 입력 문자열 `$4.44 and $10.88`에 대해서 달러 부호 `$`이후에 나오는 모든 숫자를 매칭시키고 싶다고 하자. 이때 정규 표현식 `(?<=\$)[0-9\.]*`를 사용할 수 있다. 이 정규 표현식은 `$` 문자 뒤에 나오는 문자 `.`을 포함한 모든 숫자 문자를 의미한다. 다음은 정규 표현식에서 사용되는 전후방탐색들이다. +때때로 전후방탐색Lookaround이라고 알려진 후방탐색Lookbehind과 전방탐색Lookahead은 (패턴 매칭을 위해서 사용되지만 매칭된 리스트에는 포함되지 않는) **_넌-캡쳐링 그룹_** 의 특정 종류들이다. 전후방탐색은 하나의 패턴이 다른 특정 패턴 전이나 후에 나타나는 조건을 가지고 있을때 사용한다. 예를 들어, 우리가 입력 문자열 `$4.44 and $10.88`에 대해서 달러 부호 `$`이후에 나오는 모든 숫자를 매칭시키고 싶다고 하자. 이때 정규 표현식 `(?<=\$)[0-9\.]*`를 사용할 수 있다. 이 정규 표현식은 `$` 문자 뒤에 나오는 문자 `.`을 포함한 모든 숫자 문자를 의미한다. 다음은 정규 표현식에서 사용되는 전후방탐색들이다. -|부호|설명| -|:----:|----| -|?=|긍정형 전방탐색| -|?!|부정형 전방탐색| -|?<=|긍정형 후방탐색| -|? "(?<![T|t]he\s)(cat)" => The cat sat on cat. @@ -358,11 +372,11 @@ 플래그는 정규표현식의 출력값을 수정하기 때문에 수정자(modifier)라고도 불린다. 이러한 플래그들은 어떤 순서 혹은 조합으로 사용 가능하며 정규 표현식의 일부분이다. -|플래그|설명| -|:----:|----| -|i|대소문자 구분없음: 매칭이 대소문자를 구분하지 않도록 설정.| -|g|전체 검색: 입력 문자열 전체를 대상으로 패턴을 검색.| -|m|멀티 라인: 앵터 메타 문자가 각 줄마다 동작하도록 설정.| +| 플래그 | 설명 | +| :----: | ---------------------------------------------------------- | +| i | 대소문자 구분없음: 매칭이 대소문자를 구분하지 않도록 설정. | +| g | 전체 검색: 입력 문자열 전체를 대상으로 패턴을 검색. | +| m | 멀티 라인: 앵터 메타 문자가 각 줄마다 동작하도록 설정. | ### 5.1 대소문자 구분없음 @@ -417,8 +431,8 @@ [Test the regular expression](https://regex101.com/r/E88WE2/1) ## 6. 탐욕적 vs 게으른 매칭 -기본적으로 정규 표현식은 탐욕적(greedy) 매칭을 수행하는데, 이는 가능한 한 길게 매칭하는 것을 의미한다. -우리는 `?`를 사용하여 게으른(lazy) 방법 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다. + +기본적으로 정규 표현식은 탐욕적(greedy) 매칭을 수행하는데, 이는 가능한 한 길게 매칭하는 것을 의미한다. 우리는 `?`를 사용하여 게으른(lazy) 방법 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다.
 "/(.*at)/" => The fat cat sat on the mat. 
@@ -434,10 +448,10 @@
 
 ## 기여 방법
 
-* 이슈 리포팅
-* 코드 개선해서 풀 리퀘스트 열기
-* 소문내기
-* ziishaned@gmail.com 메일로 직접 연락하기 또는 [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned)
+- 이슈 리포팅
+- 코드 개선해서 풀 리퀘스트 열기
+- 소문내기
+- ziishaned@gmail.com 메일로 직접 연락하기 또는 [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned)
 
 ## 라이센스
 

From 3a30006de007a1adc318371ceb026578b57fd9d7 Mon Sep 17 00:00:00 2001
From: "Yeongjun.Kim" 
Date: Mon, 28 Jan 2019 12:02:08 +0900
Subject: [PATCH 034/156] Update README-ko

---
 translations/README-ko.md | 52 +++++++++++++++++++--------------------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/translations/README-ko.md b/translations/README-ko.md
index ee7abdcf..5061101a 100644
--- a/translations/README-ko.md
+++ b/translations/README-ko.md
@@ -201,7 +201,7 @@
 
 ## 2.4 중괄호
 
-정규 표현식에서 정량자(quantifier)라고도 불리는 중괄호는 하나의 문자 혹은 문자 집합으로 표시된 문자가 몇번 반복되는지명시하는데 사용된다. 예를 들어, 정규 표현식 `[0-9]{2,3}`은 숫자 문자(0부터 9사이의 문자)가 최소 2번, 최대 3번 연속해서 나오는 문자열 패턴을 의미한다.
+정규 표현식에서 정량자(quantifier)라고도 불리는 중괄호는 하나의 문자 혹은 문자 집합으로 표시된 문자가 몇번 반복되는지 명시하는데 사용된다. 예를 들어, 정규 표현식 `[0-9]{2,3}`은 숫자 문자(0부터 9사이의 문자)가 최소 2번, 최대 3번 연속해서 나오는 문자열 패턴을 의미한다.
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -307,26 +307,26 @@
 
 정규 표현식은 일반적으로 사용되는 문자열 집합들을 간편하게 사용할 수 있도록 여러 단축형들을 제공한다. 단축형 문자열 집합은 아래와 같다.
 
-| 단축형 | 설명                                    |
-| :----: | --------------------------------------- |
-|   .    | 개행을 제외한 모든 문자                 |
-|   \w   | 영숫자 문자와 매치: `[a-zA-Z0-9_]`      |
-|   \W   | 영숫자 문자가 아닌 문자와 매치: `[^\w]` |
-|   \d   | 숫자와 매치: `[0-9]`                    |
-|   \D   | 숫자가 아닌 문자와 매치: `[^\d]`        |
-|   \s   | 공백 문자와 매치: `[\t\n\f\r\p{Z}]`     |
-|   \S   | 공백 문자가 아닌 문자와 매치: `[^\s]`   |
+|단축형|설명|
+|:----:|----|
+|.|개행을 제외한 모든 문자|
+|\w|영숫자 문자와 매치: `[a-zA-Z0-9_]`|
+|\W|영숫자 문자가 아닌 문자와 매치: `[^\w]`|
+|\d|숫자와 매치: `[0-9]`|
+|\D|숫자가 아닌 문자와 매치: `[^\d]`|
+|\s|공백 문자와 매치: `[\t\n\f\r\p{Z}]`|
+|\S|공백 문자가 아닌 문자와 매치: `[^\s]`|
 
 ## 4. 전후방탐색
 
 때때로 전후방탐색Lookaround이라고 알려진 후방탐색Lookbehind과 전방탐색Lookahead은 (패턴 매칭을 위해서 사용되지만 매칭된 리스트에는 포함되지 않는) **_넌-캡쳐링 그룹_** 의 특정 종류들이다. 전후방탐색은 하나의 패턴이 다른 특정 패턴 전이나 후에 나타나는 조건을 가지고 있을때 사용한다. 예를 들어, 우리가 입력 문자열 `$4.44 and $10.88`에 대해서 달러 부호 `$`이후에 나오는 모든 숫자를 매칭시키고 싶다고 하자. 이때 정규 표현식 `(?<=\$)[0-9\.]*`를 사용할 수 있다. 이 정규 표현식은 `$` 문자 뒤에 나오는 문자 `.`을 포함한 모든 숫자 문자를 의미한다. 다음은 정규 표현식에서 사용되는 전후방탐색들이다.
 
-| 부호 | 설명            |
-| :--: | --------------- |
-|  ?=  | 긍정형 전방탐색 |
-|  ?!  | 부정형 전방탐색 |
-| ?<=  | 긍정형 후방탐색 |
-| ?
 "(?<![T|t]he\s)(cat)" => The cat sat on cat.
@@ -372,11 +372,11 @@
 
 플래그는 정규표현식의 출력값을 수정하기 때문에 수정자(modifier)라고도 불린다. 이러한 플래그들은 어떤 순서 혹은 조합으로 사용 가능하며 정규 표현식의 일부분이다.
 
-| 플래그 | 설명                                                       |
-| :----: | ---------------------------------------------------------- |
-|   i    | 대소문자 구분없음: 매칭이 대소문자를 구분하지 않도록 설정. |
-|   g    | 전체 검색: 입력 문자열 전체를 대상으로 패턴을 검색.        |
-|   m    | 멀티 라인: 앵터 메타 문자가 각 줄마다 동작하도록 설정.     |
+|플래그|설명|
+|:----:|----|
+|i|대소문자 구분없음: 매칭이 대소문자를 구분하지 않도록 설정.|
+|g|전체 검색: 입력 문자열 전체를 대상으로 패턴을 검색.|
+|m|멀티 라인: 앵터 메타 문자가 각 줄마다 동작하도록 설정.|
 
 ### 5.1 대소문자 구분없음
 
@@ -448,10 +448,10 @@
 
 ## 기여 방법
 
-- 이슈 리포팅
-- 코드 개선해서 풀 리퀘스트 열기
-- 소문내기
-- ziishaned@gmail.com 메일로 직접 연락하기 또는 [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned)
+* 이슈 리포팅
+* 코드 개선해서 풀 리퀘스트 열기
+* 소문내기
+* ziishaned@gmail.com 메일로 직접 연락하기 또는 [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned)
 
 ## 라이센스
 

From 4ae12d88057e2988c17573aaa032bee64fd04cc6 Mon Sep 17 00:00:00 2001
From: "Yeongjun.Kim" 
Date: Mon, 28 Jan 2019 12:04:01 +0900
Subject: [PATCH 035/156] Update README-ko

---
 translations/README-ko.md | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/translations/README-ko.md b/translations/README-ko.md
index 5061101a..6a962ed8 100644
--- a/translations/README-ko.md
+++ b/translations/README-ko.md
@@ -98,20 +98,20 @@
 
 메타 문자들은 정규 표현식의 빌딩 블락들이다. 메타 문자들은 자체적인 의미를 가지지 않고 특별한 방식으로 해석되어진다. 어떤 메타 문자열들은 특별한 의미를 가지며 대괄호안에서 쓰인다. 아래는 이러한 메타 문자열들이다:
 
-| 메타 문자 | 설명 |
+|메타 문자|설명|
 |:----:| ----|
-| . | 온점(Period)는 줄바꿈을 제외한 어떤 종류의 단일 문자와 매치.|
-| [ ] | 문자 클래스. 대괄호 사이에 있는 문자들로 매치.|
-| [^ ] | 부정 문자 클래스. 대괄호 안에 포함되지 않은 모든 문자들로 매치.|
-| \* | 이 메타 문자의 바로 앞에 있는 심볼이 0번 이상 반복된 문자들과 매치.|
-| + | 이 메타 문자의 바로 앞에 있는 심볼이 한번 이상 반복된 문자들과 매치.|
-| ? | 이 메타 문자의 바로 앞에 있는 심볼을 선택적(optional)으로 만듬.|
-| {n,m} | 중괄호. 이 메타 문자의 바로 앞에 위치한 심볼이 최소 n번 최대 m번의 반복된 문자들과 매치.|
-| (xyz) | 문자 그룹. 문자열 xyz와 정확히 같은 순서를 가진 문자들과 매치.|
-| | | 대안. 문자가 이 메타 문자의 앞에 있는 심볼이거나 뒤에 있는 심볼이면 매치.|
-| \| 다음 문자 이스케이프(Escape). 예약된 문자열들 [ ] ( ) { } . \* + ? ^ \$ \ |을 이스케이핑함으로써 그 자체와 매칭되는 것을 허용.|
-| ^ | 입력의 시작과 매치.|
-| \$ | 입력의 끝과 매치.|
+|.|온점(Period)는 줄바꿈을 제외한 어떤 종류의 단일 문자와 매치.|
+|[ ]|문자 클래스. 대괄호 사이에 있는 문자들로 매치.|
+|[^ ]|부정 문자 클래스. 대괄호 안에 포함되지 않은 모든 문자들로 매치.|
+|\*|이 메타 문자의 바로 앞에 있는 심볼이 0번 이상 반복된 문자들과 매치.|
+|+|이 메타 문자의 바로 앞에 있는 심볼이 한번 이상 반복된 문자들과 매치.|
+|?|이 메타 문자의 바로 앞에 있는 심볼을 선택적(optional)으로 만듬.|
+|{n,m}|중괄호. 이 메타 문자의 바로 앞에 위치한 심볼이 최소 n번 최대 m번의 반복된 문자들과 매치.|
+|(xyz)|문자 그룹. 문자열 xyz와 정확히 같은 순서를 가진 문자들과 매치.|
+|||대안. 문자가 이 메타 문자의 앞에 있는 심볼이거나 뒤에 있는 심볼이면 매치.|
+|\|다음 문자 이스케이프(Escape). 예약된 문자열들 [ ] ( ) { } . \* + ? ^ \$ \ |을 이스케이핑함으로써 그 자체와 매칭되는 것을 허용.|
+|^|입력의 시작과 매치.|
+|\$|입력의 끝과 매치.|
 
 ## 2.1 마침표
 
@@ -431,7 +431,6 @@
 [Test the regular expression](https://regex101.com/r/E88WE2/1)
 
 ## 6. 탐욕적 vs 게으른 매칭
-
 기본적으로 정규 표현식은 탐욕적(greedy) 매칭을 수행하는데, 이는 가능한 한 길게 매칭하는 것을 의미한다. 우리는 `?`를 사용하여 게으른(lazy) 방법 매칭할 수 있으며, 가능한 한 짧게 매칭하는 것을 의미한다.
 
 

From 89f4503bc02fc8b8afb801fe51e1acba8ddbf24b Mon Sep 17 00:00:00 2001
From: Enis OEZGEN 
Date: Sun, 3 Feb 2019 14:46:49 +0100
Subject: [PATCH 036/156] Fix-Translation-Links

---
 translations/README-cn.md        | 22 +++++++++++-----------
 translations/README-es.md        | 22 +++++++++++-----------
 translations/README-fr.md        | 22 +++++++++++-----------
 translations/README-gr.md        | 22 +++++++++++-----------
 translations/README-hu.md        | 22 +++++++++++-----------
 translations/README-ja.md        | 22 +++++++++++-----------
 translations/README-ko.md        | 22 +++++++++++-----------
 translations/README-pl.md        | 22 +++++++++++-----------
 translations/README-pt_BR.md     | 22 +++++++++++-----------
 translations/README-tr.md        | 22 +++++++++++-----------
 translations/README-zh-simple.md | 22 +++++++++++-----------
 11 files changed, 121 insertions(+), 121 deletions(-)

diff --git a/translations/README-cn.md b/translations/README-cn.md
index c765fc54..3d256c44 100644
--- a/translations/README-cn.md
+++ b/translations/README-cn.md
@@ -17,17 +17,17 @@
 
 ## 翻译:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## 什么是正则表达式?
 
diff --git a/translations/README-es.md b/translations/README-es.md
index ff25d406..233e39ae 100644
--- a/translations/README-es.md
+++ b/translations/README-es.md
@@ -17,17 +17,17 @@
 
 ## Traducciones:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## 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.
diff --git a/translations/README-fr.md b/translations/README-fr.md
index 271a1326..46f62391 100644
--- a/translations/README-fr.md
+++ b/translations/README-fr.md
@@ -17,17 +17,17 @@
 
 ## Traductions:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## Qu'est-ce qu'une expression régulière?
 
diff --git a/translations/README-gr.md b/translations/README-gr.md
index 3a906d0d..00411898 100644
--- a/translations/README-gr.md
+++ b/translations/README-gr.md
@@ -17,17 +17,17 @@
 
 ## Μεταφράσεις:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## Τι είναι μια Κανονική Έκφραση (Regular Expression);
 
diff --git a/translations/README-hu.md b/translations/README-hu.md
index ee1e552f..48253c44 100644
--- a/translations/README-hu.md
+++ b/translations/README-hu.md
@@ -17,17 +17,17 @@
 
 ## Fordítások:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## Mi az a reguláris kifejezés?
 
diff --git a/translations/README-ja.md b/translations/README-ja.md
index 3269fea5..5657daba 100644
--- a/translations/README-ja.md
+++ b/translations/README-ja.md
@@ -17,17 +17,17 @@
 
 ## 翻訳
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## 正規表現とは
 
diff --git a/translations/README-ko.md b/translations/README-ko.md
index a13eeb43..19527422 100644
--- a/translations/README-ko.md
+++ b/translations/README-ko.md
@@ -17,17 +17,17 @@
 
 ## 번역:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## 정규표현식이란 무엇인가?
 
diff --git a/translations/README-pl.md b/translations/README-pl.md
index 2a7d387b..5a0ebda1 100644
--- a/translations/README-pl.md
+++ b/translations/README-pl.md
@@ -17,17 +17,17 @@
 
 ## Tłumaczenia:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## Co to jest wyrażenie regularne?
 
diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md
index 2a7ed8f4..7fecb53f 100644
--- a/translations/README-pt_BR.md
+++ b/translations/README-pt_BR.md
@@ -17,17 +17,17 @@
 
 ## Traduções:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## O que é uma Expressão Regular?
 
diff --git a/translations/README-tr.md b/translations/README-tr.md
index b935359f..ec918cfa 100644
--- a/translations/README-tr.md
+++ b/translations/README-tr.md
@@ -17,17 +17,17 @@
 
 ## Çeviriler:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## Düzenli İfade Nedir?
 
diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md
index 708371d2..60652cef 100644
--- a/translations/README-zh-simple.md
+++ b/translations/README-zh-simple.md
@@ -16,17 +16,17 @@
 
 ## Translations:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
 
 ## 什么是正则表达式?
  

From 1a84cd502bb208086b0761d4d507401c24cf4e21 Mon Sep 17 00:00:00 2001
From: Enis OEZGEN 
Date: Sun, 3 Feb 2019 15:52:17 +0100
Subject: [PATCH 037/156] Improve Turkish language

---
 translations/README-tr.md | 243 +++++++++++++++++++++++++++-----------
 1 file changed, 174 insertions(+), 69 deletions(-)

diff --git a/translations/README-tr.md b/translations/README-tr.md
index b935359f..6add9c61 100644
--- a/translations/README-tr.md
+++ b/translations/README-tr.md
@@ -33,9 +33,19 @@
 
 > Düzenli ifade, bir metinden belirli bir deseni bulmak için kullanılan bir karakter veya sembol grubudur.
 
-Bir düzenli ifade soldan sağa söz konusu harf öbekleriyle eşleşen bir desendir. "Regular expression" söylemesi zor bir tabirdir, genellikle "regex" ya da "regexp" olarak kısaltılmış terimler olarak bulacaksınız. Düzenli ifade bir harf öbeğinde ki bir metin değiştirmek, form doğrulamak, bir desen eşleşmesine dayalı harf öbeğinden bir alt harf öbeği ayıklamak ve çok daha fazlası için kullanılır.
-
-Bir uygulama yazdığınızı hayal edin ve bir kullanıcı kullanıcı adını seçtiğinde kullanıcı adı için kurallar belirlemek istiyorsunuz. Kullanıcı adının harfler, sayılar, altçizgiler ve tireler içermesine izin vermek istiyoruz. Ayrıca, Kullanıcı adındaki karakter sayısını sınırlamak istiyoruz böylece çirkin görünmeyecek. Bir kullanıcı adını doğrulamak için aşağıdaki düzenli ifadeyi kullanıyoruz:
+Bir düzenli ifade soldan sağa söz konusu harf öbekleriyle eşleşen bir desendir.
+"Regular expression" söylemesi zor bir tabir olduğundan dolayı, genellikle
+"regex" ya da "regexp" olarak kısaltılmış olarak bulacaksınız. Düzenli ifade bir
+harf öbeğinde ki bir metin değiştirmek, form doğrulamak, bir desen eşleşmesine
+dayalı harf öbeğinden bir alt harf öbeği ayıklamak ve çok daha fazlası için
+kullanılır.
+
+Bir uygulama yazdığınızı hayal edin ve bir kullanıcı adını seçtiğinde, bu
+kullanıcı adı için kurallar belirlemek istiyorsunuz. Kullanıcı adının harfler,
+sayılar, altçizgiler ve tireler içermesine izin vermek, ayrıca, kullanıcı
+adındaki karakter sayısını sınırlamak istiyorsunuz, böylece çirkin görünmeyecek.
+Böyle durumlarda kullanıcı adını doğrulamak için aşağıdaki düzenli ifadeyi
+kullanıyoruz:
 
 

@@ -85,7 +95,10 @@ Bir düzenli ifade bir metin içinde arama yapabilmek için kullandığımız bi [Düzenli ifadeyi test edin](https://regex101.com/r/dmRygT/1) -`123` düzenli ifadesi `123` harf öbeğiyle eşleşir. Düzenli ifade birbiri ardına, girilen harf öbeğindeki her karakter düzenli ifadenin içindeki her karakterle karşılaştırılarak eşleştirilir. Düzenli ifadeler normal olarak büyük/küçük harfe duyarlıdırlar, yani `The` düzenli ifadesi `the` harf öbeğiyle eşleşmez. +`123` düzenli ifadesi `123` harf öbeğiyle eşleşir. Düzenli ifade birbiri ardına, +girilen harf öbeğindeki her karakter düzenli ifadenin içindeki her karakterle +karşılaştırılarak eşleştirilir. Düzenli ifadeler normal olarak büyük/küçük harfe +duyarlıdırlar, yani `The` düzenli ifadesi `the` harf öbeğiyle eşleşmez.

 "The" => The fat cat sat on the mat.
@@ -95,29 +108,33 @@ Bir düzenli ifade bir metin içinde arama yapabilmek için kullandığımız bi
 
 ## 2. Meta Karakterler
 
-Meta karakterler düzenli ifadelerin yapı taşlarıdırlar. Meta karakterler kendileri için değil bunun yerine bazı özel yollarla yorumlanırlar. Bazı meta karakterler özel anlamları vardır ve bunlar köşeli parantez içinde yazılırlar.
+Meta karakterler düzenli ifadelerin yapı taşlarıdırlar. Meta karakterler
+kendileri için değil bunun yerine bazı özel yollarla yorumlanırlar. Bazı meta
+karakterler özel anlamları vardır ve bunlar köşeli parantez içinde yazılırlar.
 
 Meta karakterler aşağıdaki gibidir:
 
 |Meta karakter|Açıklama|
 |:----:|----|
-|.|Satır sonuc hariç herhangi bir karakterle eşleşir.|
+|.|Satır sonuç hariç herhangi bir karakterle eşleşir.|
 |[ ]|Köşeli parantezler arasında bulunan herhangi bir karakterle eşleşir.|
 |[^ ]|Köşeli parantez içerisinde yer alan `^` işaretinden sonra girilen karakterler haricindeki karakterlerle eşleşir.|
 |*|Kendisinden önce yazılan karakterin sıfır veya daha fazla tekrarı ile eşleşir.|
-|+|Kendisinden önce yazılan karakterin bir veya daha fazla tekrarı ile eşleşir.|
+|+|Kendisinden önce yazılan karakterin bir veya daha fazla olan tekrarı ile eşleşir.|
 |?|Kendisinden önce yazılan karakterin varlık durumunu opsiyonel kılar.|
 |{n,m}|Kendisinden önce yazılan karakterin en az `n` en fazla `m` değeri kadar olmasını ifade eder.|
 |(xyz)|Verilen sırayla `xyz` karakterleriyle eşleşir.|
-|||`|` karakterinden önce veya sonra verilen ifadelerin herhangi biriyle eşleşir. Or anlamı verir.|
-|\|Sonraki karakteri kaçırır. Bu, ayrılmış karakterleri eşleştirmenizi sağlar [ ] ( ) { } . * + ? ^ $ \ ||
+||| Karakterden önce veya sonra verilen ifadelerin herhangi biriyle eşleşebilir. İfadeye Yada anlamı katar.|
+|\|[ ] ( ) { } . * + ? ^ $ \ | özel karakterin aranmasını sağlar.|
 |^|Girilen verinin başlangıcını ifade eder.|
-|$|Girilen veririnin sonunu ifade eder.|
+|$|Girilen verinin sonunu ifade eder.|
 
 ## 2.1 Nokta
 
-Nokta `.` meta karakterin en basit örneğidir. `.` meta karakteri satır başlangıcı hariç herhangi bir karakterle eşleşir.
-Örneğin, `.ar` düzenli ifadesinin anlamı: herhangi bir karakterin ardından `a` harfi ve `r` harfi gelir.
+Nokta `.` meta karakterlerin en basit örneğidir. `.` meta karakteri satır
+başlangıcı hariç herhangi bir karakterle eşleşir. Örneğin, `.ar` düzenli
+ifadesinin anlamı: herhangi bir karakterin ardından `a` harfi ve `r` harfi
+gelir.
 
 
 ".ar" => The car parked in the garage.
@@ -127,10 +144,13 @@ Nokta `.` meta karakterin en basit örneğidir. `.` meta karakteri satır başla
 
 ## 2.2 Karakter Takımı
 
-Karakter takımları aryıca Karakter sınıfı olarak bilinir. Karakter takımlarını belirtmek için köşeli ayraçlar kullanılır.
-Karakterin aralığını belirtmek için bir karakter takımında tire kullanın. Köşeli parantezlerdeki karakter aralığının sıralaması önemli değildir. 
+Karakter takımları aryıca Karakter sınıfı olarak bilinir. Karakter takımlarını
+belirtmek için köşeli ayraçlar kullanılır. Karakterin aralığını belirtmek için
+bir karakter takımında tire kullanın. Köşeli parantezlerdeki karakter aralığının
+sıralaması önemli değildir.
 
-Örneğin, `[Tt]he` düzenli ifadesinin anlamı: bir büyük `T` veya küçük `t` harflerinin ardından sırasıyla `h` ve `e` harfi gelir.
+Örneğin, `[Tt]he` düzenli ifadesinin anlamı: bir büyük `T` veya küçük `t`
+harflerinin ardından sırasıyla `h` ve `e` harfi gelir.
 
 
 "[Tt]he" => The car parked in the garage.
@@ -138,9 +158,11 @@ Karakterin aralığını belirtmek için bir karakter takımında tire kullanın
 
 [Düzenli ifadeyi test edin](https://regex101.com/r/2ITLQ4/1)
 
-Bununla birlikte, bir karakter takımı içerisindeki bir periyot bir tam periyot demektir.
+Bununla birlikte, bir karakter takımı içerisindeki bir periyot bir tam periyot
+demektir.
 
-`ar[.]` düzenli ifadesinin anlamı: Küçük `a` karakteri ardından `r` harfi gelir, ardından bir `.` karakteri gelir.
+`ar[.]` düzenli ifadesinin anlamı: Küçük `a` karakteri ardından `r` harfi gelir,
+ardından bir `.` karakteri gelir.
 
 
 "ar[.]" => A garage is a good place to park a car.
@@ -150,9 +172,11 @@ Bununla birlikte, bir karakter takımı içerisindeki bir periyot bir tam periyo
 
 ### 2.2.1 Negatiflenmiş karakter seti
 
-Genellikle, şapka `^` sembolü harf öbeğinin başlangıcını temsil eder, ama köşeli parantez içinde kullanıldığında verilen karakter takımını hariç tutar.
+Genellikle, şapka `^` sembolü harf öbeğinin başlangıcını temsil eder, ama köşeli
+parantez içinde kullanıldığında verilen karakter takımını hariç tutar.
 
-Örneğin, `[^c]ar` ifadesinin anlamı: `c` harfinden hariç herhangi bir harfin ardından `a`, ardından `r` gelir.
+Örneğin, `[^c]ar` ifadesinin anlamı: `c` harfinden hariç herhangi bir harfin
+ardından `a`, ardından `r` gelir.
 
 
 "[^c]ar" => The car parked in the garage.
@@ -162,14 +186,19 @@ Genellikle, şapka `^` sembolü harf öbeğinin başlangıcını temsil eder, am
 
 ## 2.3 Tekrarlar
 
-`+`, `*` ya da `?` meta karakterlerinden sonra bir alt desenin kaç defa tekrar edebileceğini belirtmek için kullanılır. Bu meta karakterler farklı durumlarda farklı davranırlar.
+`+`, `*` ya da `?` meta karakterlerinden sonra bir alt desenin kaç defa tekrar
+edebileceğini belirtmek için kullanılır. Bu meta karakterler farklı durumlarda
+farklı davranırlar.
 
 ### 2.3.1 Yıldız İşareti
 
-`*` sembolü, kendinden önce girilen eşlemenin sıfır veya daha fazla tekrarıyla eşleşir. Ama bir karakter seti ya da sınıf sonrasına girildiğinde, tüm karakter setinin tekrarlarını bulur.
+`*` sembolü, kendinden önce girilen eşlemenin sıfır veya daha fazla tekrarıyla
+eşleşir. Ama bir karakter seti ya da sınıf sonrasına girildiğinde, tüm karakter
+setinin tekrarlarını bulur.
 
-`a*` düzenli ifadesinin anlamı: `a` karakterinin sıfır veya daha fazla tekrarı. 
-`[a-z]*` düzenli ifadesinin anlamı: bir satırdaki herhangi bir sayıdaki küçük harfler.
+`a*` düzenli ifadesinin anlamı: `a` karakterinin sıfır veya daha fazla
+tekrarları, `[a-z]*` düzenli ifadesinin anlamı ise bir satırdaki herhangi bir
+sayıdaki küçük harfler anlamına gelir.
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -177,9 +206,13 @@ Genellikle, şapka `^` sembolü harf öbeğinin başlangıcını temsil eder, am
 
 [Düzenli ifadeyi test edin](https://regex101.com/r/7m8me5/1)
 
-`*` sembolü `.` meta karakteri ile `.*` karakterinin herhangi harf öbeğine eşleştirmek için kullanılabilir. `*` sembolü boşluk karakteriyle `\s` bir harf öbeğinde boşluk karakterlerini eşleştirmek için kullanılabilir.
+`*` sembolü `.` meta karakteri ile `.*` karakterinin herhangi harf öbeğine
+eşleştirmek için kullanılabilir. `*` sembolü boşluk karakteriyle `\s` bir harf
+öbeğinde boşluk karakterlerini eşleştirmek için kullanılabilir.
 
-Örneğin, `\s*cat\s*` düzenli ifadesinin anlamı: sıfır veya daha fazla boşluk ardından küçük `c` karakteri gelir, ardından küçük `a` karakteri gelir, ardından küçük `t` karakteri gelir, ardından sıfır veya daha fazla boşluk gelir.
+Örneğin, `\s*cat\s*` düzenli ifadesinin anlamı: sıfır veya daha fazla boşluk
+ardından küçük `c` karakteri gelir, ardından küçük `a` karakteri gelir, ardından
+küçük `t` karakteri gelir, ardından sıfır veya daha fazla boşluk gelir.
 
 
 "\s*cat\s*" => The fat cat sat on the concatenation.
@@ -189,10 +222,13 @@ Genellikle, şapka `^` sembolü harf öbeğinin başlangıcını temsil eder, am
 
 ### 2.3.2 Artı İşareti
 
-`+` sembolü, kendinden önce girilen eşlemenin bir veya daha fazla tekrarıyla eşleşir.
+`+` sembolü, kendinden önce girilen eşlemenin bir veya daha fazla tekrarıyla
+eşleşir.
 
-Örneğin, `c.+t` ifadesinin anlamı: küçük `c` harfi, ardından en az bir karakter gelir, ardından küçük `t` karakteri gelir.
-Örnekte açıklamak gereken önemli nokta: `t` harfi cümledeki son `t` harfi olacaktır. `c` ve `t` harfi arasında en az bir karakter vardır.
+Örneğin, `c.+t` ifadesinin anlamı: küçük `c` harfi, ardından en az bir karakter
+gelir, ardından küçük `t` karakteri gelir. Örnekte açıklamak gereken önemli
+nokta: `t` harfi cümledeki son `t` harfi olacaktır. `c` ve `t` harfi arasında en
+az bir karakter vardır.
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -202,9 +238,12 @@ Genellikle, şapka `^` sembolü harf öbeğinin başlangıcını temsil eder, am
 
 ### 2.3.3 Soru İşareti
 
-Düzenli ifadelerde `?` meta karakterinden önce girilen karakteri opsiyonel olarak tanımlar. Bu sembol önce gelen karakterin sıfır veya bir örbeğiyle eşleşir.
+Düzenli ifadelerde `?` meta karakterinden önce girilen karakteri opsiyonel
+olarak tanımlar. Bu sembol önce gelen karakterin sıfır veya bir örbeğiyle
+eşleşir.
 
-Örneğin, `[T]?he` ifadesinin anlamı: opsiyonel büyük `T` harfi, ardından küçük `h` karakteri gelir, ardından küçük `e` karakteri gelir.
+Örneğin, `[T]?he` ifadesinin anlamı: opsiyonel büyük `T` harfi, ardından küçük
+`h` karakteri gelir, ardından küçük `e` karakteri gelir.
 
 
 "[T]he" => The car is parked in the garage.
@@ -220,9 +259,12 @@ Düzenli ifadelerde `?` meta karakterinden önce girilen karakteri opsiyonel ola
 
 ## 2.4 Süslü Parantez
 
-Düzenli ifadelerde miktar belirliyiciler olarakda bilinen süslü parantezler, bir karakterin veya karakter grubunun kaç defa tekrar edebileceğini belirtmek için kullanılırlar.
+Düzenli ifadelerde miktar belirliyiciler olarakda bilinen süslü parantezler, bir
+karakterin veya karakter grubunun kaç defa tekrar edebileceğini belirtmek için
+kullanılırlar.
 
-Örneğin, `[0-9]{2,3}` ifadesinin anlamı: 0 ile 0 aralığındaki karakterlerden, en az 2 en fazla 3 defa ile eşleş.
+Örneğin, `[0-9]{2,3}` ifadesinin anlamı: 0 ile 0 aralığındaki karakterlerden, en
+az 2 en fazla 3 defa ile eşleş.
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -249,13 +291,18 @@ Düzenli ifadeden virgülü kaldırırsak `[0-9]{3}`: doğrudan 3 defa eşleşir
 
 ## 2.5 Karakter Grubu
 
-Karakter grubu parantezler içine yazılmış alt desenler grubudur. Daha önce tasarım deseninde değindiğimiz gibi, bir karakterden önce bir miktar belirleyici koyarsak önceki karakteri tekrar eder. Fakat miktar belirleyiciyi bir karakter grubundan sonra koyarsak tüm karakter grubunu tekrarlar.
+Karakter grubu parantezler içine yazılmış alt desenler grubudur. Daha önce
+tasarım deseninde değindiğimiz gibi, bir karakterden önce bir miktar belirleyici
+koyarsak önceki karakteri tekrar eder. Fakat miktar belirleyiciyi bir karakter
+grubundan sonra koyarsak tüm karakter grubunu tekrarlar.
 
-Örneğin: `(ab)*` düzenli ifadesi "ab" karakterinin sıfır veya daha fazla tekrarıyla eşleşir.
+Örneğin: `(ab)*` düzenli ifadesi "ab" karakterinin sıfır veya daha fazla
+tekrarıyla eşleşir.
 
 Ayrıca karakter grubu içinde `|` meta karakterini kullanabiliriz.
 
-Örneğin, `(c|g|p)ar` düzenli ifadesinin anlamı: küçük `c`, `g` veya `p` karakteri, ardından `a` karakteri, ardından `r` karakteri gelir.
+Örneğin, `(c|g|p)ar` düzenli ifadesinin anlamı: küçük `c`, `g` veya `p`
+karakteri, ardından `a` karakteri, ardından `r` karakteri gelir.
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -265,9 +312,15 @@ Ayrıca karakter grubu içinde `|` meta karakterini kullanabiliriz.
 
 ## 2.6 Değişim
 
-Düzenli ifadede dik çizgi alternasyon(değişim, dönüşüm) tanımlamak için kullanılır. Alternasyon birden fazla ifade arasındaki bir koşul gibidir. Şu an, karakter grubu ve alternasyonun aynı şekilde çalıştığını düşünüyor olabilirsiniz. Ama, Karakter grubu ve alternasyon arasındaki büyük fark karakter grubu karakter düzeyinde çalışır ama alternasyon ifade düzeyinde çalışır. 
+Düzenli ifadede dik çizgi alternasyon(değişim, dönüşüm) tanımlamak için
+kullanılır. Alternasyon birden fazla ifade arasındaki bir koşul gibidir. Şu an,
+karakter grubu ve alternasyonun aynı şekilde çalıştığını düşünüyor
+olabilirsiniz. Ama, Karakter grubu ve alternasyon arasındaki büyük fark karakter
+grubu karakter düzeyinde çalışır ama alternasyon ifade düzeyinde çalışır.
 
-Örneğin, `(T|t)he|car` düzenli ifadesinin anlamı: Büyük `T` ya da küçük `t` karakteri, ardından küçük `h` karakteri, ardından küçük `e` ya da `c` karakteri, ardından küçük `a`, ardından küçük `r` karakteri gelir.
+Örneğin, `(T|t)he|car` düzenli ifadesinin anlamı: Büyük `T` ya da küçük `t`
+karakteri, ardından küçük `h` karakteri, ardından küçük `e` ya da `c` karakteri,
+ardından küçük `a`, ardından küçük `r` karakteri gelir.
 
 
 "(T|t)he|car" => The car is parked in the garage.
@@ -277,12 +330,19 @@ Düzenli ifadede dik çizgi alternasyon(değişim, dönüşüm) tanımlamak içi
 
 ## 2.7 Özel Karakter Hariç Tutma
 
-`\` işareti sonraki karakteri hariç tutmak için kullanılır. Bu bir semboülü ayrılmış karakterlerde `{ } [ ] / \ + * . $ ^ | ?` dahil olmak üzere eşleşen bir karakter olarak belirtmemizi sağlar. Bir özel karakteri eşleşen bir karakter olarak kullanmak için önüne `\` işareti getirin.
+`\` işareti sonraki karakteri hariç tutmak için kullanılır. Bu bir semboülü
+ayrılmış karakterlerde `{ } [ ] / \ + * . $ ^ | ?` dahil olmak üzere eşleşen bir
+karakter olarak belirtmemizi sağlar. Bir özel karakteri eşleşen bir karakter
+olarak kullanmak için önüne `\` işareti getirin.
 
-Örneğin, `.` düzenli ifadesi yeni satır hariç herhangi bir karakteri eşleştirmek için kullanılır. 
-Bir harf öbeği içinde nokta `.` karakterini yakalamak için `.` ayrılmış karakterini hariç tutmamız gerekir. Bunun için nokta önüne `\` işaretini koymamız gereklidir.
+Örneğin, `.` düzenli ifadesi yeni satır hariç herhangi bir karakteri eşleştirmek
+için kullanılır. Bir harf öbeği içinde nokta `.` karakterini yakalamak için `.`
+ayrılmış karakterini hariç tutmamız gerekir. Bunun için nokta önüne `\`
+işaretini koymamız gereklidir.
 
-`(f|c|m)at\.?` düzenli ifadesinin anlamı: küçük `f`, `c`ya da `m` harfi, ardından küçük `a` harfi, ardından küçük `t` harfi, ardından opsiyonel `.` karakteri gelir.
+`(f|c|m)at\.?` düzenli ifadesinin anlamı: küçük `f`, `c`ya da `m` harfi,
+ardından küçük `a` harfi, ardından küçük `t` harfi, ardından opsiyonel `.`
+karakteri gelir.
 
 
 "(f|c|m)at\.?" => The fat cat sat on the mat.
@@ -292,17 +352,26 @@ Bir harf öbeği içinde nokta `.` karakterini yakalamak için `.` ayrılmış k
 
 ## 2.8 Sabitleyiciler
 
-Düzenli ifadelerde, eşleşen sembolün girilen harf öbeğinin başlangıç sembolü veya bitiş sembolü olup olmadığını kontrol etmek için sabitleyicileri kullanırız. 
-Sabitleyiciler iki çeşittir: İlk çeşit eşleşen karakterin girişin ilk karakteri olup olmadığını kontrol eden şapka `^` karakteri, ve ikinci çeşit eşleşen karakterin girişin son karakteri olup olmadığını kontrol eden dolar `$` karakteridir.
+Düzenli ifadelerde, eşleşen sembolün girilen harf öbeğinin başlangıç sembolü
+veya bitiş sembolü olup olmadığını kontrol etmek için sabitleyicileri
+kullanırız. Sabitleyiciler iki çeşittir: İlk çeşit, eşleşen karakterin girişin
+ilk karakteri olup olmadığını kontrol eden şapka `^` karakteri, ikinci çeşit ise
+eşleşen karakterin girişin son karakteri olup olmadığını kontrol eden dolar `$`
+karakteridir.
 
 ### 2.8.1 Şapka İşareti
 
-Şapka `^` işareti eşleşen karakterin giriş harf öbeğinin ilk karakteri olup olmadığını kontrol etmek için kullanılır.
-Eğer `^a` düzenli ifadesini `abc` harf öbeğine uygularsak `a` ile eşleşir. Ama `^b` ifadesini uygularsak bir eşleşme bulamayız. Bunun nedeni `abc` harf öbeğinde `b` karakterinin başlangıç karakteri olmamasıdır.
+Şapka `^` işareti eşleşen karakterin giriş harf öbeğinin ilk karakteri olup
+olmadığını kontrol etmek için kullanılır. Eğer `^a` düzenli ifadesini `abc` harf
+öbeğine uygularsak `a` ile eşleşir. Ama `^b` ifadesini uygularsak bir eşleşme
+bulamayız. Bunun nedeni `abc` harf öbeğinde `b` karakterinin başlangıç karakteri
+olmamasıdır.
 
-Bir başka örnek üzerinden ilerlersek, 
+Bir başka örnek üzerinden ilerlersek,
 
-`^(T|t)he` düzenli ifadesinin anlamı: büyük `T` ya da `t` karakteri giriş harf öbeğinin ilk karakteri olmak üzere, ardından küçük `h`, ardından küçük `e` karakteri gelir.
+`^(T|t)he` düzenli ifadesinin anlamı: büyük `T` ya da `t` karakteri giriş harf
+öbeğinin ilk karakteri olmak üzere, ardından küçük `h`, ardından küçük `e`
+karakteri gelir.
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -318,9 +387,12 @@ Bir başka örnek üzerinden ilerlersek,
 
 ### 2.8.2 Dolar İşareti
 
-Dolar `$` işareti eşleşen karakterin giriş harf öbeğinin son karakteri olup olmadığını kontrol etmek için kullanılır.
+Dolar `$` işareti eşleşen karakterin giriş harf öbeğinin son karakteri olup
+olmadığını kontrol etmek için kullanılır.
 
-Örneğin, `(at\.)$` ifadesinin anlamı: küçük bir `a` karakteri, ardından küçük bir `t` karakteri, ardıdan nokta `.` karakteri gelir ve bu eşleşme harf öbeğinin sonunda olmalıdır.
+Örneğin, `(at\.)$` ifadesinin anlamı: küçük bir `a` karakteri, ardından küçük
+bir `t` karakteri, ardıdan nokta `.` karakteri gelir ve bu eşleşme harf öbeğinin
+sonunda olmalıdır.
 
 
 "(at\.)" => The fat cat. sat. on the mat.
@@ -336,9 +408,10 @@ Dolar `$` işareti eşleşen karakterin giriş harf öbeğinin son karakteri olu
 
 ##  3. Kısaltma Karakter Takımları
 
-Regex, yaygın olarak kullanılan düzenli ifadeler için uygun kısaltmalar sunan sık kullanılan karakter setleri için kısaltmalar sağlar.
+Regex, sık olarak kullanılan düzenli ifadeler için özel karakter setleri ve
+kısaltmalar sağlar.
 
-Kullanılan karakter setleri kısaltmaları aşağıdaki gibidir:
+Kullanılan karakter setlerinin kısaltmaları aşağıdaki gibidir:
 
 |Kısaltma|Açıklama|
 |:----:|----|
@@ -352,13 +425,16 @@ Kullanılan karakter setleri kısaltmaları aşağıdaki gibidir:
 
 ## 4. Bakınmak
 
-Bakınma sembolleri, bir ifade öncesinde veya sonrasında başka bir ifademiz olduğunda kullanılırlar.
+Bakınma sembolleri, bir ifade öncesinde veya sonrasında başka bir ifademiz
+olduğunda kullanılırlar.
 
-Örneğin, `$4.44 ve $10.88` girişlerinden `$` karakteri önündeki tüm sayıları almak istiyoruz, bu durumda `(?<=\$)[0-9\.]*` ifadesini kullanırız.
+Örneğin, `$4.44 ve $10.88` girişlerinden `$` karakteri önündeki tüm sayıları
+almak istiyoruz, bu durumda `(?<=\$)[0-9\.]*` ifadesini kullanırız.
 
-`(?<=\$)[0-9\.]*` ifadesinin anlamı: `.` karakterini içeren ve `$` karakteriyle devam eden tüm sayıları al.
+`(?<=\$)[0-9\.]*` ifadesinin anlamı: `.` karakterini içeren ve `$` karakteriyle
+devam eden tüm sayıları al demektir.
 
-Düzenli ifadelerde kullanılan bakınma sembolleri aşağıdadır:
+Düzenli ifadelerde kullanılan bakınma sembolleri aşadaki gibidir:
 
 |Sembol|Açıklama|
 |:----:|----|
@@ -369,9 +445,16 @@ Düzenli ifadelerde kullanılan bakınma sembolleri aşağıdadır:
 
 ### 4.1 Positive Lookahead
 
-Positive Lookahead, ifadenin ilk bölümü bakınma ifadesiyle devam etmesi gerektiğini savunur. Bulunan eşleşme yalnızca ifadenin ilk bölümüyle eşleşen metin içerir. Olumlu bir bakınma tanımlamak için, içinde eşittir işareti yer alan parantezler `(?=...)` şeklinde kullanılır. Bakınma ifadesi parantezler içinde eşittir işaretinden sonra yazılır.
+Positive Lookahead, ifadenin ilk bölümü bakınma ifadesiyle devam etmesi
+gerektiğini savunur. Bulunan eşleşme yalnızca ifadenin ilk bölümüyle eşleşen
+metin içerir. Olumlu bir bakınma tanımlamak için, içinde eşittir işareti yer
+alan parantezler `(?=...)` şeklinde kullanılır. Bakınma ifadesi parantezler
+içinde eşittir işaretinden sonra yazılır.
 
-Örneğin, `[T|t]he(?=\sfat)` ifadesinin anlamı: opsiyonel küçük bir `t` ya da büyük `T` harfi, ardından `h` harfi gelir, ardından `e` harfi gelir. Parantez içinde ise bu dizilimin bir boşluk karakterinden sonra `fat` öbeğiyle devam edeceğini tanımlıyoruz.
+Örneğin, `[T|t]he(?=\sfat)` ifadesinin anlamı: opsiyonel küçük bir `t` ya da
+büyük `T` harfi, ardından `h` harfi gelir, ardından `e` harfi gelir. Parantez
+içinde ise bu dizilimin bir boşluk karakterinden sonra `fat` öbeğiyle devam
+edeceğini tanımlıyoruz.
 
 
 "[T|t]he(?=\sfat)" => The fat cat sat on the mat.
@@ -381,9 +464,13 @@ Positive Lookahead, ifadenin ilk bölümü bakınma ifadesiyle devam etmesi gere
 
 ### 4.2 Negative Lookahead
 
-Negative Lookahead sembolü positive lookahead tersine, verdiğimiz desenle devam etmemesi durumunda eşleşir. Bu sembol positive lookahead gibi tanımlanır ama `=` işareti yerine `!` kullanılır.
+Negative Lookahead sembolü positive lookahead tersine, verdiğimiz desenle devam
+etmemesi durumunda eşleşir. Bu sembol positive lookahead gibi tanımlanır ama `=`
+işareti yerine `!` kullanılır.
 
-`[T|t]he(?!\sfat)` ifadesinin anlamı: opsiyonel küçük bir `t` ya da büyük `T` harfi, ardından `h` harfi gelir, ardından `e` harfi gelir, ardından öncesinde boşluk olan bir `fat` öbeği olmamalıdır.
+`[T|t]he(?!\sfat)` ifadesinin anlamı: opsiyonel küçük bir `t` ya da büyük `T`
+harfi, ardından `h` harfi gelir, ardından `e` harfi gelir, ardından öncesinde
+boşluk olan bir `fat` öbeği olmamalıdır.
 
 
 
@@ -394,9 +481,11 @@ Negative Lookahead sembolü positive lookahead tersine, verdiğimiz desenle deva
 
 ### 4.3 Positive Lookbehind
 
-Positive Lookbehind, belirli bir desenden önceki eşleşmeleri almak için kullanılır. `(?<=...)` ile gösterilir.
+Positive Lookbehind, belirli bir desenden önceki eşleşmeleri almak için
+kullanılır. `(?<=...)` ile gösterilir.
 
-Örneğin, `(?<=[T|t]he\s)(fat|mat)` ifadesinin anlamı: Öncesinde `The` veya `the` öbekleri olan tüm `fat` veya `mat` öbeklerini getir.
+Örneğin, `(?<=[T|t]he\s)(fat|mat)` ifadesinin anlamı: Öncesinde `The` veya `the`
+öbekleri olan tüm `fat` veya `mat` öbeklerini getir.
 
 
 "(?<=[T|t]he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -406,9 +495,11 @@ Positive Lookbehind, belirli bir desenden önceki eşleşmeleri almak için kull
 
 ### 4.4 Negative Lookbehind
 
-Negative Lookbehind, belirli bir desenden önce olmayan eşleşmeleri almak için kullanılır. `(?<=!..)` ile gösterilir.
+Negative Lookbehind, belirli bir desenden önce olmayan eşleşmeleri almak için
+kullanılır. `(?<=!..)` ile gösterilir.
 
-Örneğin, `(?
 "(?<![T|t]he\s)(cat)" => The cat sat on cat.
@@ -418,7 +509,10 @@ Negative Lookbehind, belirli bir desenden önce olmayan eşleşmeleri almak içi
 
 ## 5. İşaretler
 
-İşaretler ayrıca düzenleyiciler olarak bilinirler, çünkü onlar bir düzenli ifadenin çıktısını düzenlerler. Bu işaretler herhangi bir sırada veya kombinasyonda kullanılabilirler, ve bunlar Düzenli İfadelerin ayrılmaz bir parçasıdırlar.
+İşaretler ayrıca düzenleyiciler olarak bilinirler, çünkü onlar bir düzenli
+ifadenin çıktısını düzenlerler. Bu işaretler herhangi bir sırada veya
+kombinasyonda kullanılabilirler, ve bunlar Düzenli İfadelerin ayrılmaz bir
+parçasıdırlar.
 
 |İşaret|Açıklama|
 |:----:|----|
@@ -428,9 +522,13 @@ Negative Lookbehind, belirli bir desenden önce olmayan eşleşmeleri almak içi
 
 ### 5.1 Büyük/Küçük harf duyarlılığı
 
-`ì` işaretleyicisi büyük/küçük harfe duyarsız eşleştirme yapmak için kullanılır.
+`i` işaretleyicisi büyük/küçük harfe duyarsız eşleştirme yapmak için kullanılır.
 
-Örneğin, `/The/gi` ifadesi: büyük `T` harfi, ardından küçük `h` harfi, ardından küçük `e` harfi gelir. ifadenin sonunda yer alan `i` işareti büyük-küçük harfe karşı duyarsız olması gerektiğini belirtir. Ayrıca `g` işaretinide kullandığımızı görebilirsiniz, tüm text içinde bu aramayı yapmak istediğimiz için `g` işaretini ayrıca belirtiyoruz.
+Örneğin, `/The/gi` ifadesi: büyük `T` harfi, ardından küçük `h` harfi, ardından
+küçük `e` harfi gelir. ifadenin sonunda yer alan `i` işareti büyük-küçük harfe
+karşı duyarsız olması gerektiğini belirtir. Ayrıca `g` işaretinide
+kullandığımızı görebilirsiniz, tüm text içinde bu aramayı yapmak istediğimiz
+için `g` işaretini ayrıca belirtiyoruz.
 
 
 "The" => The fat cat sat on the mat.
@@ -446,7 +544,8 @@ Negative Lookbehind, belirli bir desenden önce olmayan eşleşmeleri almak içi
 
 ### 5.2 Genel Arama
 
-`g` işareti bir giriş içinde eşleşen tüm varsayonları bulmak için kullanılır. `g` işareti kullanılmazsa ilk eşleşme bulunduktan sonra arama sona erer.
+`g` işareti bir giriş içinde eşleşen tüm varsayonları bulmak için kullanılır.
+`g` işareti kullanılmazsa ilk eşleşme bulunduktan sonra arama sona erer.
 
 
 "/.(at)/" => The fat cat sat on the mat.
@@ -462,9 +561,15 @@ Negative Lookbehind, belirli bir desenden önce olmayan eşleşmeleri almak içi
 
 ### 5.3 Çok Satırlı
 
-`m` işareti çok satırlı bir eşleşme sağlamak için kullanılır. Daha önce sabitleyicilerde gördüğümüz gibi `(^, $)` sembolleri aradığımız desenin harf öbeğinin başında veya sonunda olup olmadığını kontrol etmemiz için kullanılır. Bu sabitleyicilerin tüm satırlarda çalışması için `m` işaretini kullanırız.
+`m` işareti çok satırlı bir eşleşme bulmak için kullanılır. Daha önce
+sabitleyicilerde gördüğümüz gibi `(^, $)` sembolleri aradığımız desenin harf
+öbeğinin başında veya sonunda olup olmadığını kontrol etmemiz için kullanılır.
+Bu sabitleyicilerin tüm satırlarda çalışması için `m` işaretini kullanırız.
 
-Örneğin, `/at(.)?$/gm` ifadesinin anlamı: küçük `a` harfi, ardından küçük `t` harfi gelir, ardından opsiyonel olarak yeni satır hariç herhangi birşey gelebilir. `m` işaretini kullandığımız için bir girişin her satırının sonunda eşleştirir.
+Örneğin, `/at(.)?$/gm` ifadesinin anlamı: küçük `a` harfi, ardından küçük `t`
+harfi gelir, ardından opsiyonel olarak yeni satır hariç herhangi birşey
+gelebilir. `m` işaretini kullandığımız için bir girişin her satırının sonunda
+eşleştirir.
 
 
 "/.at(.)?$/" => The fat

From 0435c394dccd8dbd230559f9ea2443781ab73b4a Mon Sep 17 00:00:00 2001
From: guiemi 
Date: Fri, 8 Feb 2019 16:22:00 -0200
Subject: [PATCH 038/156] =?UTF-8?q?Corrige=20a=20ocorr=C3=AAncia=20de=20cr?=
 =?UTF-8?q?ases=20no=20texto.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

(EN) Fixes some grammar mistakes related to the crase.
---
 translations/README-pt_BR.md | 41 ++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 20 deletions(-)

diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md
index 7fecb53f..a8e2f61d 100644
--- a/translations/README-pt_BR.md
+++ b/translations/README-pt_BR.md
@@ -33,11 +33,12 @@
 
 > Expressão Regular é um grupo de caracteres ou símbolos utilizado para encontrar um padrão específico a partir de um texto.
 
-Uma expressão regular é um padrão que é comparado com uma cadeia de caracteres da esquerda para a direita. A expressão "Expressão regular" é longa e difícil de falar, você geralmente vai encontrar o termo abreviado como "regex" ou "regexp". Expressões regulares são usadas para substituir um texto dentro de uma string, validar formulários, extrair uma parte de uma string baseada em um padrão encontrado e muito mais.
+Uma expressão regular é um padrão que é comparado com uma cadeia de caracteres da esquerda para a direita. A expressão "Expressão regular" é longa e difícil de falar; você geralmente vai encontrar o termo abreviado como "regex" ou "regexp". Expressões regulares são usadas para substituir um texto dentro de uma string, validar formulários, extrair uma parte de uma string baseada em um padrão encontrado e muito mais.
 
 Imagine que você está escrevendo uma aplicação e quer colocar regras para quando um usuário escolher seu username. Nós queremos permitir que o username contenha letras, números, underlines e hífens. Nós também queremos limitar o número de caracteres para não ficar muito feio. Então usamos a seguinte expressão regular para validar o username:
 
 

+

Regular expression

@@ -83,7 +84,7 @@ Uma expressão regular é apenas um padrão de caracteres que usamos para fazer [Teste a RegExp](https://regex101.com/r/dmRygT/1) -A expressão regular `123` corresponde a string `123`. A expressão regular é comparada com uma string de entrada, comparando cada caractere da expressão regular para cada caractere da string de entrada, um após o outro. Expressões regulares são normalmente case-sensitive (sensíveis à maiúsculas), então a expressão regular `The` não vai bater com a string `the`. +A expressão regular `123` corresponde à string `123`. A expressão regular é comparada com uma string de entrada, comparando cada caractere da expressão regular para cada caractere da string de entrada, um após o outro. Expressões regulares são normalmente case-sensitive (sensíveis a maiúsculas), então a expressão regular `The` não vai bater com a string `the`.
 "The" => The fat cat sat on the mat.
@@ -101,19 +102,19 @@ Os metacaracteres são os seguintes:
 |.|Corresponde a qualquer caractere, exceto uma quebra de linha|
 |[ ]|Classe de caracteres. Corresponde a qualquer caractere contido dentro dos colchetes.|
 |[^ ]|Classe de caracteres negada. Corresponde a qualquer caractere que não está contido dentro dos colchetes.|
-|*|Corresponde à 0 ou mais repetições do símbolo anterior.|
-|+|Corresponde à 1 ou mais repetições do símbolo anterior.|
+|*|Corresponde a 0 ou mais repetições do símbolo anterior.|
+|+|Corresponde a 1 ou mais repetições do símbolo anterior.|
 |?|Faz com que o símbolo anterior seja opcional.|
-|{n,m}|Chaves. Corresponde à no mínimo "n" mas não mais que "m" repetições do símbolo anterior.|
+|{n,m}|Chaves. Corresponde a no mínimo "n" mas não mais que "m" repetições do símbolo anterior.|
 |(xyz)|Grupo de caracteres. Corresponde aos caracteres xyz nesta exata ordem.|
-|||Alternância. Corresponde os caracteres antes ou os caracteres depois do símbolo|
+|||Alternância. Corresponde aos caracteres antes ou os caracteres depois do símbolo|
 |\|Escapa o próximo caractere. Isso permite você utilizar os caracteres reservados [ ] ( ) { } . * + ? ^ $ \ ||
 |^|Corresponde ao início da entrada.|
 |$|Corresponde ao final da entrada.|
 
 ## 2.1 Ponto final
 
-O ponto final `.` é um simples exemplo de metacaracteres. O metacaractere `.` corresponde à qualquer caractere sozinho. Ele não se iguala ao Enter e à quebra de linha. Por exemplo, a expressão regular `.ar` significa: qualquer caractere, seguido da letra `a`, seguida da letra `r`.
+O ponto final `.` é um simples exemplo de metacaracteres. O metacaractere `.` corresponde a qualquer caractere sozinho. Ele não se iguala ao Enter e à quebra de linha. Por exemplo, a expressão regular `.ar` significa: qualquer caractere, seguido da letra `a`, seguida da letra `r`.
 
 
 ".ar" => The car parked in the garage.
@@ -155,7 +156,7 @@ Seguindo os metacaracteres `+`, `*` ou `?` são utilizados para especificar quan
 
 ### 2.3.1 O Asterisco
 
-O símbolo `*` corresponde à zero ou mais repetições do padrão antecedente. A expressão regular `a*` significa: zero ou mais repetições do caractere minúsculo precedente `a`. Mas se o asterisco aparecer depois de um conjunto de caracteres, ou classe de caracteres, ele irá procurar as repetições de todo o conjunto. Por exemplo, a expressão regular `[a-z]*` significa: qualquer quantidade de letras minúsculas numa linha.
+O símbolo `*` corresponde a zero ou mais repetições do padrão antecedente. A expressão regular `a*` significa: zero ou mais repetições do caractere minúsculo precedente `a`. Mas se o asterisco aparecer depois de um conjunto de caracteres, ou classe de caracteres, ele irá procurar as repetições de todo o conjunto. Por exemplo, a expressão regular `[a-z]*` significa: qualquer quantidade de letras minúsculas numa linha.
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -173,7 +174,7 @@ O símbolo `*` pode ser usado junto do metacaractere `.` para encontrar qualquer
 
 ### 2.3.2 O Sinal de Adição
 
-O símbolo `+` corresponde à uma ou mais repetições do caractere anterior. Por exemplo, a expressão regular `c.+t` significa: a letra minúscula `c`, seguida por pelo menos um caractere, seguido do caractere minúsculo `t`.
+O símbolo `+` corresponde a uma ou mais repetições do caractere anterior. Por exemplo, a expressão regular `c.+t` significa: a letra minúscula `c`, seguida por pelo menos um caractere, seguido do caractere minúsculo `t`.
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -183,7 +184,7 @@ O símbolo `+` corresponde à uma ou mais repetições do caractere anterior. Po
 
 ### 2.3.3 O Ponto de Interrogação
 
-Em expressões regulares, o metacaractere `?` faz o caractere anterior ser opcional. Esse símbolo corresponde à zero ou uma ocorrência do caractere anterior. Por exemplo, a expressão regular `[T]?he` significa: A letra maiúsculo `T` opcional, seguida do caractere minúsculo `h`, seguido do caractere minúsculo `e`.
+Em expressões regulares, o metacaractere `?` faz o caractere anterior ser opcional. Esse símbolo corresponde a zero ou uma ocorrência do caractere anterior. Por exemplo, a expressão regular `[T]?he` significa: A letra maiúsculo `T` opcional, seguida do caractere minúsculo `h`, seguido do caractere minúsculo `e`.
 
 
 "[T]he" => The car is parked in the garage.
@@ -199,7 +200,7 @@ Em expressões regulares, o metacaractere `?` faz o caractere anterior ser opcio
 
 ## 2.4 Chaves
 
-Em expressões regulares, chaves, que também são chamadas de quantificadores, são utilizadas para especificar o número de vezes que o caractere, ou um grupo de caracteres, pode se repetir. Por exemplo, a expressão regular `[0-9]{2,3}` significa: Encontre no mínimo 2 dígitos, mas não mais que 3 (caracteres no intervalo de 0 à 9).
+Em expressões regulares, chaves, que também são chamadas de quantificadores, são utilizadas para especificar o número de vezes que o caractere, ou um grupo de caracteres, pode se repetir. Por exemplo, a expressão regular `[0-9]{2,3}` significa: Encontre no mínimo 2 dígitos, mas não mais que 3 (caracteres no intervalo de 0 a 9).
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -223,7 +224,7 @@ Nós podemos retirar o segundo número. Por exemplo, a expressão regular `[0-9]
 
 ## 2.5 Grupo de Caracteres
 
-Grupo de caracteres é um grupo de sub-padrão que é escrito dentro de parênteses `(...)`. Como falamos antes, se colocaramos um quantificador depois de um caractere, ele irá repetir o caractere anterior. Mas se colocarmos um quantificador depois de um grupo de caracteres, ele irá repetir todo o conjunto. Por exemplo, a expressão regular `(ab)*` corresponde à zero ou mais repetições dos caracteres "ab". Nós também podemos usar o metacaractere de alternância `|` dentro de um grupo de caracteres. Por exemplo, a expressão regular `(c|g|p)ar` significa: caractere minúsculo `c`, `g` ou `p`, seguido do caractere `a`, seguido do caractere `r`.
+Grupo de caracteres é um grupo de sub-padrão que é escrito dentro de parênteses `(...)`. Como falamos antes, se colocaramos um quantificador depois de um caractere, ele irá repetir o caractere anterior. Mas se colocarmos um quantificador depois de um grupo de caracteres, ele irá repetir todo o conjunto. Por exemplo, a expressão regular `(ab)*` corresponde a zero ou mais repetições dos caracteres "ab". Nós também podemos usar o metacaractere de alternância `|` dentro de um grupo de caracteres. Por exemplo, a expressão regular `(c|g|p)ar` significa: caractere minúsculo `c`, `g` ou `p`, seguido do caractere `a`, seguido do caractere `r`.
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -294,16 +295,16 @@ As expressões regulares fornecem abreviações para conjuntos de caracteres com
 |Abreviação|Descrição|
 |:----:|----|
 |.|Qualquer caractere, exceto nova linha|
-|\w|Corresponde à caracteres alfanuméricos: `[a-zA-Z0-9_]`|
-|\W|Corresponde à caracteres não alfanuméricos: `[^\w]`|
-|\d|Corresponde à dígitos: `[0-9]`|
-|\D|Corresponde à não dígitos: `[^\d]`|
-|\s|Corresponde à caracteres de espaços em branco: `[\t\n\f\r\p{Z}]`|
-|\S|Corresponde à caracteres de espaços não em branco: `[^\s]`|
+|\w|Corresponde a caracteres alfanuméricos: `[a-zA-Z0-9_]`|
+|\W|Corresponde a caracteres não alfanuméricos: `[^\w]`|
+|\d|Corresponde a dígitos: `[0-9]`|
+|\D|Corresponde a não dígitos: `[^\d]`|
+|\s|Corresponde a caracteres de espaços em branco: `[\t\n\f\r\p{Z}]`|
+|\S|Corresponde a caracteres de espaços não em branco: `[^\s]`|
 
 ## 4. Olhar ao Redor
 
-Lookbehind (olhar atrás) e lookahead (olhar à frente), às vezes conhecidos como lookarounds (olhar ao redor), são tipos específicos de ***grupo de não captura*** (utilizado para encontrar um padrão, mas não incluí-lo na lista de ocorrêncoas). Lookarounds são usados quando temos a condição de que determinado padrão seja precedido ou seguido de outro padrão. Por exemplo, queremos capturar todos os números precedidos do caractere `$` da seguinte string de entrada: `$4.44 and $10.88`. Vamos usar a seguinte expressão regular `(?<=\$)[0-9\.]*` que significa: procure todos os números que contêm o caractere `.` e são precedidos pelo caractere `$`. À seguir estão os lookarounds que são utilizados em expressões regulares:
+Lookbehind (olhar atrás) e lookahead (olhar à frente), às vezes conhecidos como lookarounds (olhar ao redor), são tipos específicos de ***grupo de não captura*** (utilizado para encontrar um padrão, mas não incluí-lo na lista de ocorrêncoas). Lookarounds são usados quando temos a condição de que determinado padrão seja precedido ou seguido de outro padrão. Por exemplo, queremos capturar todos os números precedidos do caractere `$` da seguinte string de entrada: `$4.44 and $10.88`. Vamos usar a seguinte expressão regular `(?<=\$)[0-9\.]*` que significa: procure todos os números que contêm o caractere `.` e são precedidos pelo caractere `$`. A seguir estão os lookarounds que são utilizados em expressões regulares:
 
 |Símbolo|Descrição|
 |:----:|----|
@@ -362,7 +363,7 @@ Flags (sinalizadores) também são chamados de modificadores, porque eles modifi
 |g|Busca global: Procura o padrão em toda a string de entrada.|
 |m|Multilinhas: Os metacaracteres de âncora funcionam em cada linha.|
 
-### 5.1 Indiferente à Maiúsculas
+### 5.1 Indiferente a Maiúsculas
 
 O modificador `i` é usado para tornar o padrão case-insensitive. Por exemplo, a expressão regular `/The/gi` significa: a letra maiúscula `T`, seguida do caractere minúsculo `h`, seguido do caractere `e`. E ao final da expressão regular, a flag `i` diz ao motor de expressões regulares para ignorar maiúsculas e minúsculas. Como você pode ver, nós também determinamos a flag `g` porque queremos procurar o padrão em toda a string de entrada.
 

From 780edf731801af3c1520c8d8fd0bf8b66041b2cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=8A=B1=E8=A3=A4=E8=A1=A9?= 
Date: Wed, 20 Mar 2019 21:59:01 +0800
Subject: [PATCH 039/156] fix CN

---
 translations/README-cn.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-cn.md b/translations/README-cn.md
index 3d256c44..447f0c68 100644
--- a/translations/README-cn.md
+++ b/translations/README-cn.md
@@ -189,7 +189,7 @@
 `*`和表示匹配空格的符号`\s`连起来用, 如表达式`\s*cat\s*`匹配0或更多个空格开头和0或更多个空格结尾的cat字符串.
 
 
-"\s*cat\s*" => The fat cat sat on the concatenation.
+"\s*cat\s*" => The fat cat sat on the concatenation.
 
[在线练习](https://regex101.com/r/gGrwuz/1) From 45a211d191d7ec107dfa974794e3106bef84e836 Mon Sep 17 00:00:00 2001 From: ivothgle Date: Fri, 22 Mar 2019 17:32:07 +0800 Subject: [PATCH 040/156] Fix image link error --- translations/README-cn.md | 2 +- translations/README-es.md | 2 +- translations/README-fr.md | 2 +- translations/README-gr.md | 2 +- translations/README-hu.md | 2 +- translations/README-ja.md | 2 +- translations/README-ko.md | 2 +- translations/README-pl.md | 2 +- translations/README-tr.md | 2 +- translations/README-zh-simple.md | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 447f0c68..fd0b9137 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -43,7 +43,7 @@

- Regular expression + Regular expression

以上的正则表达式可以接受 `john_doe`, `jo-hn_doe`, `john12_as`. diff --git a/translations/README-es.md b/translations/README-es.md index 233e39ae..f059dc62 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -39,7 +39,7 @@ Imagina que estás escribiendo una aplicación y quieres agregar reglas para cua

- Expresión regular + Expresión regular

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. diff --git a/translations/README-fr.md b/translations/README-fr.md index 46f62391..66caacc8 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -42,7 +42,7 @@ le pseudonyme à contenir des lettres, des nombres, des underscores et des trait de caractères dans le pseudonyme pour qu'il n'ait pas l'air moche. Nous utilisons l'expression régulière suivante pour valider un pseudonyme:

- Expressions régulières + Expressions régulières

L'expression régulière ci-dessus peut accepter les chaines de caractères (string) `john_doe`, `jo-hn_doe` et `john12_as`. Ça ne fonctionne pas avec `Jo` car cette chaine de caractères (string) contient une lettre majuscule et elle est trop courte. diff --git a/translations/README-gr.md b/translations/README-gr.md index 00411898..42c133bc 100644 --- a/translations/README-gr.md +++ b/translations/README-gr.md @@ -47,7 +47,7 @@ string με βάση κάποιου μοτίβου αναζήτησης και

- Regular expression + Regular expression

Η παραπάνω κανονική έκφραση θα δεχτεί ως σωστά τα ονόματα χρήστη `john_doe`, `jo-hn_doe` και diff --git a/translations/README-hu.md b/translations/README-hu.md index 48253c44..cc433678 100644 --- a/translations/README-hu.md +++ b/translations/README-hu.md @@ -47,7 +47,7 @@ használjuk:

- Regular expression + Regular expression

A feljebbi reguláris kifejezés elfogadja a `john_doe`, `jo-hn_doe` és a diff --git a/translations/README-ja.md b/translations/README-ja.md index 5657daba..4675635d 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -45,7 +45,7 @@

- Regular expression + Regular expression

この正規表現によって `john_doe, jo-hn_doe, john12_as` などは許容されることになります。 diff --git a/translations/README-ko.md b/translations/README-ko.md index 19527422..d75a5c5f 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -39,7 +39,7 @@

- Regular expression + Regular expression

위의 정규 표현식은 `john_doe`, `jo-hn_doe`, 그리고 `john12_as` 문자열을 받아들일 수 있다. `Jo`는 대문자를 포함하고 있고 길이가 너무 짧기 때문에 위의 정규표현식과 매칭되지 않는다. diff --git a/translations/README-pl.md b/translations/README-pl.md index 5a0ebda1..f9104d55 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -48,7 +48,7 @@ regularne, aby sprawdzić poprawność nazwy:

- Wyrażenie regularne + Wyrażenie regularne

Powyższe wyrażenie akceptuje łańcuchy `john_doe`, `jo-hn_doe` diff --git a/translations/README-tr.md b/translations/README-tr.md index 47472e6e..cc218776 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -49,7 +49,7 @@ kullanıyoruz:

- Regular expression + Regular expression

Yukardaki düzenli ifade `john_doe`, `jo-hn_doe` ve `john12_as` gibi girişleri kabul edebilir. diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index 60652cef..4f60eccc 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -42,7 +42,7 @@

-Regular expression + Regular expression

以上的正则表达式可以接受 `john_doe`, `jo-hn_doe`, `john12_as`. From 7c06620b6369439570c7fae88ef6156773f6aa0d Mon Sep 17 00:00:00 2001 From: ParadoxZW <964730078@qq.com> Date: Sun, 7 Apr 2019 15:36:13 +0800 Subject: [PATCH 041/156] fix some improper statement in cn-translation --- translations/README-cn.md | 60 +++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index fd0b9137..0513841f 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -59,7 +59,7 @@ * [2.2.1 否定字符集](#221-否定字符集) * [2.3 重复次数](#23-重复次数) * [2.3.1 * 号](#231--号) - * [2.3.2 号](#232--号) + * [2.3.2 + 号](#232--号) * [2.3.3 ? 号](#233--号) * [2.4 {} 号](#24--号) * [2.5 (...) 特征标群](#25--特征标群) @@ -69,11 +69,11 @@ * [2.8.1 ^ 号](#281--号) * [2.8.2 $ 号](#282--号) * [3. 简写字符集](#3-简写字符集) -* [4. 前后关联约束(前后预查)](#4-前后关联约束前后预查) - * [4.1 ?=... 前置约束(存在)](#41--前置约束存在) - * [4.2 ?!... 前置约束-排除](#42--前置约束-排除) - * [4.3 ?<= ... 后置约束-存在](#43---后置约束-存在) - * [4.4 ?<!... 后置约束-排除](#44--后置约束-排除) +* [4. 零宽度断言(前后预查)](#4-零宽度断言前后预查) + * [4.1 ?=... 正先行断言](#41--正先行断言) + * [4.2 ?!... 负先行断言](#42--负先行断言) + * [4.3 ?<= ... 正后发断言](#43---正后发断言) + * [4.4 ?<!... 负后发断言](#44--负后发断言) * [5. 标志](#5-标志) * [5.1 忽略大小写 (Case Insensitive)](#51-忽略大小写-case-insensitive) * [5.2 全局搜索 (Global search)](#52-全局搜索-global-search) @@ -349,32 +349,32 @@ |\v|匹配一个垂直制表符| |\p|匹配 CR/LF (等同于 `\r\n`),用来匹配 DOS 行终止符| -## 4. 前后关联约束(前后预查) +## 4. 零宽度断言(前后预查) -前置约束和后置约束都属于**非捕获簇**(用于匹配不在匹配列表中的格式). -前置约束用于判断所匹配的格式是否在另一个确定的格式之后. +先行断言和后发断言都属于**非捕获簇**(不捕获文本 ,也不针对组合计进行计数). +先行断言用于判断所匹配的格式是否在另一个确定的格式之前, 匹配结果不包含该确定格式(仅作为约束). -例如, 我们想要获得所有跟在 `$` 符号后的数字, 我们可以使用正向向后约束 `(?<=\$)[0-9\.]*`. +例如, 我们想要获得所有跟在 `$` 符号后的数字, 我们可以使用正后发断言 `(?<=\$)[0-9\.]*`. 这个表达式匹配 `$` 开头, 之后跟着 `0,1,2,3,4,5,6,7,8,9,.` 这些字符可以出现大于等于 0 次. -前后关联约束如下: +零宽度断言如下: |符号|描述| |:----:|----| -|?=|前置约束-存在| -|?!|前置约束-排除| -|?<=|后置约束-存在| -|? "(T|t)he(?=\sfat)" => The fat cat sat on the mat. @@ -382,10 +382,10 @@ [在线练习](https://regex101.com/r/IDDARt/1) -### 4.2 `?!...` 前置约束-排除 +### 4.2 `?!...` 负先行断言 -前置约束-排除 `?!` 用于筛选所有匹配结果, 筛选条件为 其后不跟随着定义的格式 -`前置约束-排除` 定义和 `前置约束(存在)` 一样, 区别就是 `=` 替换成 `!` 也就是 `(?!...)`. +负先行断言 `?!` 用于筛选所有匹配结果, 筛选条件为 其后不跟随着断言中定义的格式. +`正先行断言` 定义和 `负先行断言` 一样, 区别就是 `=` 替换成 `!` 也就是 `(?!...)`. 表达式 `(T|t)he(?!\sfat)` 匹配 `The` 和 `the`, 且其后不跟着 `(空格)fat`. @@ -395,9 +395,9 @@ [在线练习](https://regex101.com/r/V32Npg/1) -### 4.3 `?<= ...` 后置约束-存在 +### 4.3 `?<= ...` 正后发断言 -后置约束-存在 记作`(?<=...)` 用于筛选所有匹配结果, 筛选条件为 其前跟随着定义的格式. +正后发断言 记作`(?<=...)` 用于筛选所有匹配结果, 筛选条件为 其前跟随着断言中定义的格式. 例如, 表达式 `(?<=(T|t)he\s)(fat|mat)` 匹配 `fat` 和 `mat`, 且其前跟着 `The` 或 `the`.
@@ -406,9 +406,9 @@
 
 [在线练习](https://regex101.com/r/avH165/1)
 
-### 4.4 `?
@@ -419,7 +419,7 @@
 
 ## 5. 标志
 
-标志也叫修饰语, 因为它可以用来修改表达式的搜索结果.
+标志也叫模式修正符, 因为它可以用来修改表达式的搜索结果.
 这些标志可以任意的组合使用, 它也是整个正则表达式的一部分.
 
 |标志|描述|
@@ -447,7 +447,7 @@
 
 ### 5.2 全局搜索 (Global search)
 
-修饰符 `g` 常用语执行一个全局搜索匹配, 即(不仅仅返回第一个匹配的, 而是返回全部).
+修饰符 `g` 常用于执行一个全局搜索匹配, 即(不仅仅返回第一个匹配的, 而是返回全部).
 例如, 表达式 `/.(at)/g` 表示搜索 任意字符(除了换行) + `at`, 并返回全部结果.
 
 

From d2ddc4d5ba8bc293d08225fcdad338bc19e2d96a Mon Sep 17 00:00:00 2001
From: Zeeshan Ahmad 
Date: Mon, 27 May 2019 11:10:18 +0400
Subject: [PATCH 042/156] Add funding yml file

---
 .github/FUNDING.yml | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 .github/FUNDING.yml

diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..b994b54a
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+open_collective: learn-regex

From 897be2d07c1c1e2970813b14a6e298198345d135 Mon Sep 17 00:00:00 2001
From: Zeeshan Ahmad 
Date: Mon, 27 May 2019 11:36:31 +0400
Subject: [PATCH 043/156] Update FUNDING.yml

---
 .github/FUNDING.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index b994b54a..42e653b6 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1 +1,2 @@
 open_collective: learn-regex
+patreon: ziishaned

From 9392a3df39e4351abd55112eee5045cb82a7bed3 Mon Sep 17 00:00:00 2001
From: Zeeshan Ahmad 
Date: Wed, 3 Jul 2019 10:12:18 +0400
Subject: [PATCH 044/156] Add github badge

---
 README.md | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index d0712bbe..15f1c262 100644
--- a/README.md
+++ b/README.md
@@ -6,10 +6,13 @@
     

- + - + + + +

From 7c6353325b0e431d87d2df4823e0f0382ec54227 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Wed, 3 Jul 2019 10:14:25 +0400 Subject: [PATCH 045/156] Add twitter badge inside readme --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 15f1c262..60e5dff8 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,8 @@

- - - - + From c5738a7c63db0c3de43c28bc9a7707e3e1f7e3d9 Mon Sep 17 00:00:00 2001 From: Veikko Lehmuskorpi Date: Thu, 4 Jul 2019 11:05:02 +0300 Subject: [PATCH 046/156] Fix 2.5.1. header anchor link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 60e5dff8..b83683fc 100644 --- a/README.md +++ b/README.md @@ -310,7 +310,7 @@ within parenthesis `(...)`. For example, the regular expression `(?:c|g|p)ar` is Non-capturing groups can come in handy when used in find-and-replace functionality or when mixed with capturing groups to keep the overview when producing any other kind of output. -See also [4. Lookaround](# 4. Lookaround). +See also [4. Lookaround](#4-lookaround). ## 2.6 Alternation From 982462b60165b370bf864bc416455276dc2668b2 Mon Sep 17 00:00:00 2001 From: mrtheyann Date: Sun, 7 Jul 2019 21:21:11 +0500 Subject: [PATCH 047/156] Translate to Russian (#142) --- img/regexp-ru.png | Bin 0 -> 17905 bytes translations/README-ru.md | 565 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 565 insertions(+) create mode 100644 img/regexp-ru.png create mode 100644 translations/README-ru.md diff --git a/img/regexp-ru.png b/img/regexp-ru.png new file mode 100644 index 0000000000000000000000000000000000000000..a28870ccdda15091fc187f8a181d1f0a9a8e828e GIT binary patch literal 17905 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 literal 0 HcmV?d00001 diff --git a/translations/README-ru.md b/translations/README-ru.md new file mode 100644 index 00000000..78288300 --- /dev/null +++ b/translations/README-ru.md @@ -0,0 +1,565 @@ +

+
+
+ Learn Regex + +

+

+ + + + + + +

+

+ +## Translations: + +* [English](README.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) +* [Русский](translations/README-ru.md) + +## Что такое Регулярное выражение? + +> Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте. + +Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. +Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". +Регулярные выражения используются для замен текста внутри строк, валидации форм, +извлечений подстрок по определенным шаблонам и множества других вещей. + +Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. +Для этого, используем следующее регулярное выражение: + + +

+

+ Regular expression +

+ +Регулярное выражения выше может принимать строки `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-мультистроковый-поиск) +- [Жадные vs ленивые квантификаторы](#6-жадные-vs-ленивые-квантификаторы) + +## 1. Совпадения. + +В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте. +Например, регулярное выражение `the` состоит из буквы` t`, за которой следует буква `h`, за которой следует буква `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/dmRygT/1) + +Регулярное выражение `123` соответствует строке` 123`. Регулярное выражение сопоставляется с входной строкой, сравнивая +каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения +обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке` the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/1paXsy/1) + +## 2. Метасимволы + +Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы не означают что-то сами по себе, +вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют +особые обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы: + +|Метасимволы|Описание| +|:----:|----| +|.|Точка соответствует любому отдельному символу, кроме разрыва строки.| +|[ ]|Класс символов. Находить любые символы заключенные в квадратных скобках.| +|[^ ]|Отрицание класа символов. Находить любые символы не заключенные в квадратных скобках.| +|*|Находить 0 или более повторений предыдущего символа.| +|+|Находить 1 или более повторений предыдущего символа.| +|?|Сделать предыдущий символ необязательным.| +|{n,m}|Скобки. Находить по крайней мере "n" но не более чем "m" повторений предыдущего символа.| +|(xyz)|Группа символов. Находить только символы xyz в указанном порядке.| +|||Чередование. Находить либо буквы до, либо буквы после символа.| +|\|Экранирование. Позволяет находить зарезервированные символы: [ ] ( ) { } . * + ? ^ $ \ || +|^|Обозначает начало пользовательского ввода.| +|$|Обозначает конец пользовательского ввода.| + +## 2.1 Точка + +Точка `.` это простейший пример метасимвола. Метасимвол `.` +находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки. +For example, the regular expression `.ar` means: any character, followed by the +letter `a`, followed by the letter `r`. Например, регулярное выражение '.ar' обозначает: любой символ, за которым следуют буквы ` a` и `r`. + +
+".ar" => The car parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/xc9GkU/1) + +## 2.2 Набор символов. + +Набор символов также называется классом символов. Квадратные скобки используются +для определения набора символов. Дефис используется для указания диапазона символов. +Порядок следования символов, заданный в квадратных скобках, не важен. Например, +регулярное выражение `[Tt]he` обозначает заглавную 'T' или строчную 't', за которой следуют буквы 'h' и 'e'. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1) + +Точка внутри набора символов, однако, обозначает непосредственно точку, как символ. +Регулярное выражение `ar[.]` обозначает строчную 'a', за которой следует 'r', за которой следует '.' (символ точки). + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Отрицание набора символов + +Знак вставки '^' обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов. +Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме 'c', за которым следуют буквы 'a' и 'r'. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/nNNlq3/1) + +## 2.3 Повторения + +Символы `+`, `*` or `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон. +Данные метасимволы могут вести себя по-разному, в зависимости от ситуации. + +### 2.3.1 Звёздочка + +Символ `*` обозначает ноль или более повторений предыдущего совпадения. +Регулярное выражение `a *` означает ноль или более повторений предыдущего +строчного символа `a`. Если же символ появляется после набора или класса символов, +он находит повторения всего набора символов. Например, регулярное выражение `[a-z] *` +означает любое количество строчных букв в строке. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/7m8me5/1) + +Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.` +для поиска одной строки с произвольным содержанием `. * `. Символ `*` может использоваться +с символом пробела `\ s`, чтобы находить строки с символами пробела. Например, выражение +`\ s * cat \ s *` означает: ноль или более пробелов, за которыми следует слово `cat`, +за которым следует ноль или более символов пробела. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 Плюс + +Символ `+` соответствует одному или более повторению предыдущего символа. Например, +регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ, +следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним` t` в предложении. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 Знак вопроса + +В регулярном выражении метасимвол `?` делает предыдущий символ необязательным. +Этот символ соответствует нулю или одному экземпляру предыдущего символа. +Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы 'h' и 'e'. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/kPpO2x/1) + +## 2.4 Фигурные скобки + +В фигурных скобках, которые также называются квантификаторами, указывается, +сколько раз символ или группа символов могут повторяться. Например, регулярное выражение +`[0-9] {2,3}` означает совпадение не менее 2 но не более 3 цифр в диапазоне от 0 до 9. + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/juM86s/1) + +Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9] {2,}` будет означать +совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение +`[0-9] {3}` будет означать совпадение точно с 3 цифрами. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/Sivu30/1) + +## 2.5 Скобочные группы + +Скобочные группы это группы подшаблонов, которые написаны в круглых скобках +`(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор +после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после +скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab) *` соответствует +нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|` +внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`, +`g` или `p`, за которыми следуют буквы 'a' и 'r'. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/tUxrBG/1) + +Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке. +Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций. + +### 2.5.1 Не запоминающие скобочные группы + +Бывает так, что группу определить нужно, а вот запоминать их содержимое в массиве не требуется. +Подобный трюк осуществляется при помощи зарезервированной комбинации `?:` +в круглых скобках `(...)`. Например, регулярное выражение `(?:c|g|p)ar` будет находить такие же шаблоны как и +`(c|g|p)ar`, однако скобочная группа при этом создана не будет. + +
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1) + +Не запоминающиеся группы пригодиться, когда они используются в функциях поиска и замены +или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных, +смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки). + +## 2.6 Альтернация + +В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования). +Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что +чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что +набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений. +Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из 'h' и 'e') и шаблон +(строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов, +по аналогии с логической операцией ИЛИ в программировании и алгебре выражений. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/fBXyX0/1) + +## 2.7 Экранирование спецсимволов + +Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа. +Это позволяет формировать шаблоны с поиском зарезервированных символамов, таких как `{ } [ ] / \ + * . $ ^ | ?`. +Для использования спецсимвола в шаблоне необходимо указать символ '\' перед ним. + +Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки. +Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение +`(f|c|m)at\.?`, что соответствует следующему шаблону: стройчный символ `f`, `c` или `m`, за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/DOc5Nu/1) + +## 2.8 Якоря + +Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли +соответствующий символ начальным или конечным символом входной строки. Якоря бывают двух типов: +Первый тип - Каретка `^`, проверяет, является ли соответствующий символ начальным символом в тексте. +Второй тип - Доллар `$`, проверяет, является ли соответствующий символ последним символом входной строки. + +### 2.8.1 Каретка + +Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки. +Если мы применяем следующее регулярное выражение `^a` (если a является начальным символом) для строки `abc`, +совпадение будет соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на той же строке, +мы не получим совпадения, поскольку во входящей строке `abc` "b" не является первым символом. Рассмотрим другое +регулярное выражение: `^(T|t)he`, обозначающее заглавную `T` или строчную `t` как первый символ, за которым следуют +символы букв 'h' и 'e'. Cоответственно: + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Доллар + +Символ доллара `$` используется для проверки, является ли соответствующий символ +последним символом входной строки. Например, регулярное выражение `(at\.)$` последовательность из +строчной `a`, строчной `t`, и точки `.`, ключевой момент в том, что благодаря доллару этот шаблон будет +находить совпадения только в том случае, если будет наблюдаться в конце строки. Например: + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Запустить регулярное выражение](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. Опережающие и ретроспективные проверки + +Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид +***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив). +Данные проверки используются, мы знаем, что шаблон предшествует или сопровождается другим шаблоном. +Например, мы хотим получить получить цену в долларах `$`, из следующей входной строки +`$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее +получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют +следующие виды проверок: + +|Символ|Описание| +|:----:|----| +|?=|Положительное опережающее условие| +|?!|Отрицательное опережающее условие| +|?<=|Положительное ретроспективное условие| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. +
+ +[Запустить регулярное выражение](https://regex101.com/r/IDDARt/1) + +### 4.2 Отрицательное опережающее условие + +Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить +все совпадения из входной строки, за которыми НЕ следует определенный шаблон. Отрицательное опережающее условие +определяется таким же образом, как и позитивное, с той лишь разницей, что вместо равенства `=` мы ставим +восклицательный знак `!` (отрицание) например: `(?!...)`. Рассмотрим выражение `(T|t)he(?!\sfat)`, в котором мы +находим все `The` или `the` слова из входной строки, за которыми не следует слово `fat`. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/V32Npg/1) + +### 4.3 Положительное ретроспективное условие + +Положительное ретроспективное условие используется чтобы найти все совпадения, которым предшествует +определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает, +найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` or `the`. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/avH165/1) + +### 4.4 Отрицательное ретроспективное условие + +Отрицательное ретроспективное условие используется чтобы найти все совпадения, которым НЕ предшествует +определенный шаблон. Условие определяется как `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. +
+ +[Запустить регулярное выражение](https://regex101.com/r/8Efx5G/1) + +## 5. Флаги + +Флаги, также называемые модификаторами, изменяют вывод регулярного выражения. +Эти флаги могут быть использованы в любом порядке или комбинации, и являются +неотъемлемой частью регулярных выражений. + +|Флаг|Описание| +|:----:|----| +|i|Поиск без учета регистра| +|g|Глобальный поиск: поиск шаблона во всем входном тексте| +|m|Мультистроковый поиск: Якоря применяются к каждой строке.| + +### 5.1 Поиск без учета регистра + +Модификатор `i` используется для поиска без учета регистра. Например, регулярное выражение +`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`, +указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во +всем входном тексте, использован флаг `g`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/ahfiuh/1) + +### 5.2 Глобальный поиск + +Модификатор `g` используется для выполнения глобального сопоставления (найти все совпадения, а не останавливаться после первого). +Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`. +Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом +(что является поведением по умолчанию). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/dO1nef/1) + +### 5.3 Мультистроковый поиск + +Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее, +якоря `(^, $)` используются для проверки, является ли шаблон началом или концом входной строки. +Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например, +регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой +символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм +регулярных выражений будет искать данный шаблон в конце каждой строки в тексте. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/E88WE2/1) + +## 6. Жадные vs ленивые квантификаторы +По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет +искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который +будет стремиться быть как можно более коротким по времени. + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/2) + + +## Содействие + +* Вы можете открыть пулл реквест с улучшением +* Обсуждать идеи в issues +* Распространять ссылку на репозиторий +* Получить обратную связь через [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## Лицензия + +MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) \ No newline at end of file From 65938c0533eb9b2b84cc8c62d2279e7004918084 Mon Sep 17 00:00:00 2001 From: mrtheyann Date: Sun, 7 Jul 2019 21:25:17 +0500 Subject: [PATCH 048/156] Update translations list --- README.md | 1 + translations/README-cn.md | 1 + translations/README-es.md | 1 + translations/README-fr.md | 1 + translations/README-gr.md | 1 + translations/README-hu.md | 1 + translations/README-ja.md | 1 + translations/README-ko.md | 1 + translations/README-pl.md | 1 + translations/README-pt_BR.md | 1 + translations/README-tr.md | 1 + translations/README-zh-simple.md | 1 + 12 files changed, 12 insertions(+) diff --git a/README.md b/README.md index b83683fc..94b44d06 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ * [Greek](translations/README-gr.md) * [Magyar](translations/README-hu.md) * [Polish](translations/README-pl.md) +* [Русский](translations/README-ru.md) ## What is Regular Expression? diff --git a/translations/README-cn.md b/translations/README-cn.md index 0513841f..ac375044 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## 什么是正则表达式? diff --git a/translations/README-es.md b/translations/README-es.md index f059dc62..d12f2343 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## 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. diff --git a/translations/README-fr.md b/translations/README-fr.md index 66caacc8..ab245d9d 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## Qu'est-ce qu'une expression régulière? diff --git a/translations/README-gr.md b/translations/README-gr.md index 42c133bc..a59eec5c 100644 --- a/translations/README-gr.md +++ b/translations/README-gr.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## Τι είναι μια Κανονική Έκφραση (Regular Expression); diff --git a/translations/README-hu.md b/translations/README-hu.md index cc433678..ffed4dbb 100644 --- a/translations/README-hu.md +++ b/translations/README-hu.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## Mi az a reguláris kifejezés? diff --git a/translations/README-ja.md b/translations/README-ja.md index 4675635d..e59a73b7 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## 正規表現とは diff --git a/translations/README-ko.md b/translations/README-ko.md index d75a5c5f..80e3a049 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## 정규표현식이란 무엇인가? diff --git a/translations/README-pl.md b/translations/README-pl.md index f9104d55..a0cc5a70 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## Co to jest wyrażenie regularne? diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md index a8e2f61d..1aaf7a4a 100644 --- a/translations/README-pt_BR.md +++ b/translations/README-pt_BR.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## O que é uma Expressão Regular? diff --git a/translations/README-tr.md b/translations/README-tr.md index cc218776..094456d0 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -28,6 +28,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## Düzenli İfade Nedir? diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index 4f60eccc..ee33936d 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -27,6 +27,7 @@ * [Greek](../translations/README-gr.md) * [Magyar](../translations/README-hu.md) * [Polish](../translations/README-pl.md) +* [Русский](translations/README-ru.md) ## 什么是正则表达式? From db9cf88153ad1474853e7bf8fbfd52718166fb6a Mon Sep 17 00:00:00 2001 From: mrtheyann Date: Sun, 7 Jul 2019 21:33:00 +0500 Subject: [PATCH 049/156] Fix regexp-ru.png display --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 78288300..eea55aab 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -44,7 +44,7 @@

- Regular expression + Regular expression

Регулярное выражения выше может принимать строки `john_doe`,` jo-hn_doe` и `john12_as`. From 0e046dd0582d3eb1c56efefc4c88d4eecd22676e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E6=98=AF=E6=B4=97=E8=A1=A3=E6=9C=BA?= Date: Mon, 8 Jul 2019 15:51:38 +0800 Subject: [PATCH 050/156] Fix content's order --- translations/README-cn.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 0513841f..8883baa8 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -236,15 +236,15 @@ 我们可以省略第二个参数. 例如, `[0-9]{2,}` 匹配至少两位 0~9 的数字. -如果逗号也省略掉则表示重复固定的次数. -例如, `[0-9]{3}` 匹配3位数字 -
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
 
[在线练习](https://regex101.com/r/Gdy4w5/1) +如果逗号也省略掉则表示重复固定的次数. +例如, `[0-9]{3}` 匹配3位数字 +
 "[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
 
From cfe3850d8ed6afbb825d84e44254189e0dfef994 Mon Sep 17 00:00:00 2001 From: Andrey Ponomarenko Date: Wed, 10 Jul 2019 13:49:08 +0100 Subject: [PATCH 051/156] Removed wrong english sentence --- translations/README-ru.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index eea55aab..df194261 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -126,8 +126,7 @@ Точка `.` это простейший пример метасимвола. Метасимвол `.` находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки. -For example, the regular expression `.ar` means: any character, followed by the -letter `a`, followed by the letter `r`. Например, регулярное выражение '.ar' обозначает: любой символ, за которым следуют буквы ` a` и `r`. +Например, регулярное выражение '.ar' обозначает: любой символ, за которым следуют буквы ` a` и `r`.
 ".ar" => The car parked in the garage.
@@ -562,4 +561,4 @@ letter `a`, followed by the letter `r`. Например, регулярное 
 
 ## Лицензия
 
-MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)
\ No newline at end of file
+MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)

From 57a7df38aa54a8741c32aa5d60c42687b35b4a93 Mon Sep 17 00:00:00 2001
From: pravdakotchestno 
Date: Wed, 10 Jul 2019 16:56:40 +0300
Subject: [PATCH 052/156] Links fix

---
 translations/README-ru.md | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/translations/README-ru.md b/translations/README-ru.md
index df194261..ad6e9a68 100644
--- a/translations/README-ru.md
+++ b/translations/README-ru.md
@@ -16,18 +16,18 @@
 
 ## Translations:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
+* [Русский](../translations/README-ru.md)
 
 ## Что такое Регулярное выражение?
 

From ba0298dc7813a5c8ab73d20ed719b947d8c89d6f Mon Sep 17 00:00:00 2001
From: pravdakotchestno 
Date: Wed, 10 Jul 2019 16:57:18 +0300
Subject: [PATCH 053/156] Links fix

---
 translations/README-es.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-es.md b/translations/README-es.md
index d12f2343..a65a5fed 100644
--- a/translations/README-es.md
+++ b/translations/README-es.md
@@ -28,7 +28,7 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
 
 ## 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.

From 48dc9be5ef9924f4b46c7dc2c4a5893d3307bcdd Mon Sep 17 00:00:00 2001
From: Oleg Ermakov 
Date: Thu, 11 Jul 2019 17:51:20 +0300
Subject: [PATCH 054/156] Fixed translation

Fixed spelling of some words
---
 translations/README-ru.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/translations/README-ru.md b/translations/README-ru.md
index ad6e9a68..e00c2280 100644
--- a/translations/README-ru.md
+++ b/translations/README-ru.md
@@ -311,12 +311,12 @@
 ## 2.7 Экранирование спецсимволов
 
 Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа. 
-Это позволяет формировать шаблоны с поиском зарезервированных символамов, таких как `{ } [ ] / \ + * . $ ^ | ?`. 
+Это позволяет формировать шаблоны с поиском зарезервированных символов, таких как `{ } [ ] / \ + * . $ ^ | ?`. 
 Для использования спецсимвола в шаблоне необходимо указать символ '\' перед ним.
 
 Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки. 
 Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение
-`(f|c|m)at\.?`, что соответствует следующему шаблону: стройчный символ `f`, `c` или `m`,  за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
+`(f|c|m)at\.?`, что соответствует следующему шаблону: строчный символ `f`, `c` или `m`,  за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
 
 
 "(f|c|m)at\.?" => The fat cat sat on the mat.

From eb62537b48ceb8379b4c0ec39238006a63718214 Mon Sep 17 00:00:00 2001
From: Seasle 
Date: Fri, 2 Aug 2019 21:11:43 +0600
Subject: [PATCH 055/156] Fixes

Fixed translation;
Fixed whitespaces;
Fixed inline code blocks.
---
 translations/README-ru.md | 154 +++++++++++++++++++-------------------
 1 file changed, 77 insertions(+), 77 deletions(-)

diff --git a/translations/README-ru.md b/translations/README-ru.md
index e00c2280..f1d10605 100644
--- a/translations/README-ru.md
+++ b/translations/README-ru.md
@@ -33,12 +33,12 @@
 
 > Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте.
 
-Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. 
-Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". 
+Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо.
+Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки".
 Регулярные выражения используются для замен текста внутри строк, валидации форм,
 извлечений подстрок по определенным шаблонам и множества других вещей.
 
-Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм.  Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы.  Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. 
+Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно.
 Для этого, используем следующее регулярное выражение:
 
 
@@ -47,7 +47,7 @@
   Regular expression
 

-Регулярное выражения выше может принимать строки `john_doe`,` jo-hn_doe` и `john12_as`. +Регулярное выражения выше может принимать строки `john_doe`,`jo-hn_doe` и `john12_as`. Оно не валидирует `Jo`, поскольку эта строка содержит заглавные буквы, а также она слишком короткая. ## Содержание @@ -82,8 +82,8 @@ ## 1. Совпадения. -В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте. -Например, регулярное выражение `the` состоит из буквы` t`, за которой следует буква `h`, за которой следует буква `e`. +В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте. +Например, регулярное выражение `the` состоит из буквы `t`, за которой следует буква `h`, за которой следует буква `e`.
 "the" => The fat cat sat on the mat.
@@ -91,9 +91,9 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/dmRygT/1)
 
-Регулярное выражение `123` соответствует строке` 123`. Регулярное выражение сопоставляется с входной строкой, сравнивая 
-каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения 
-обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке` the`.
+Регулярное выражение `123` соответствует строке `123`. Регулярное выражение сопоставляется с входной строкой, сравнивая
+каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения
+обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке `the`.
 
 
 "The" => The fat cat sat on the mat.
@@ -104,7 +104,7 @@
 ## 2. Метасимволы
 
 Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы не означают что-то сами по себе,
-вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют 
+вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют
 особые обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы:
 
 |Метасимволы|Описание|
@@ -119,14 +119,14 @@
 |(xyz)|Группа символов. Находить только символы xyz в указанном порядке.|
 |||Чередование. Находить либо буквы до, либо буквы после символа.|
 |\|Экранирование. Позволяет находить зарезервированные символы: [ ] ( ) { } . * + ? ^ $ \ ||
-|^|Обозначает начало пользовательского ввода.| 
+|^|Обозначает начало пользовательского ввода.|
 |$|Обозначает конец пользовательского ввода.|
 
 ## 2.1 Точка
 
 Точка `.` это простейший пример метасимвола. Метасимвол `.`
 находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки.
-Например, регулярное выражение '.ar' обозначает: любой символ, за которым следуют буквы ` a` и `r`.
+Например, регулярное выражение `.ar` обозначает: любой символ, за которым следуют буквы `a` и `r`.
 
 
 ".ar" => The car parked in the garage.
@@ -137,9 +137,9 @@
 ## 2.2 Набор символов.
 
 Набор символов также называется классом символов. Квадратные скобки используются
-для определения набора символов. Дефис используется для указания диапазона символов. 
-Порядок следования символов, заданный в квадратных скобках, не важен. Например, 
-регулярное выражение  `[Tt]he` обозначает заглавную 'T' или строчную 't', за которой следуют буквы 'h' и 'e'.
+для определения набора символов. Дефис используется для указания диапазона символов.
+Порядок следования символов, заданный в квадратных скобках, не важен. Например,
+регулярное выражение `[Tt]he` обозначает заглавную `T` или строчную `t`, за которой следуют буквы `h` и `e`.
 
 
 "[Tt]he" => The car parked in the garage.
@@ -147,8 +147,8 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1)
 
-Точка внутри набора символов, однако, обозначает непосредственно точку, как символ. 
-Регулярное выражение `ar[.]` обозначает строчную 'a', за которой следует 'r', за которой следует '.' (символ точки).
+Точка внутри набора символов, однако, обозначает непосредственно точку, как символ.
+Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует `r`, за которой следует `.` (символ точки).
 
 
 "ar[.]" => A garage is a good place to park a car.
@@ -158,8 +158,8 @@
 
 ### 2.2.1 Отрицание набора символов
 
-Знак вставки '^' обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов. 
-Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме 'c', за которым следуют буквы 'a' и 'r'.
+Знак вставки `^` обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов.
+Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме `c`, за которым следуют буквы `a` и `r`.
 
 
 "[^c]ar" => The car parked in the garage.
@@ -169,15 +169,15 @@
 
 ## 2.3 Повторения
 
-Символы `+`, `*` or `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон. 
+Символы `+`, `*` или `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон.
 Данные метасимволы могут вести себя по-разному, в зависимости от ситуации.
 
 ### 2.3.1 Звёздочка
 
-Символ `*` обозначает ноль или более повторений предыдущего совпадения. 
-Регулярное выражение `a *` означает ноль или более повторений предыдущего
+Символ `*` обозначает ноль или более повторений предыдущего совпадения.
+Регулярное выражение `a*` означает ноль или более повторений предыдущего
 строчного символа `a`. Если же символ появляется после набора или класса символов,
-он находит повторения всего набора символов. Например, регулярное выражение `[a-z] *`
+он находит повторения всего набора символов. Например, регулярное выражение `[a-z]*`
 означает любое количество строчных букв в строке.
 
 
@@ -186,10 +186,10 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/7m8me5/1)
 
-Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.` 
-для поиска одной строки с произвольным содержанием `. * `. Символ `*` может использоваться
-с символом пробела `\ s`, чтобы находить строки с символами пробела. Например, выражение 
-`\ s * cat \ s *` означает: ноль или более пробелов, за которыми следует слово  `cat`,
+Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.`
+для поиска одной строки с произвольным содержанием `.*`. Символ `*` может использоваться
+с символом пробела `\s`, чтобы находить строки с символами пробела. Например, выражение
+`\s*cat\s*` означает: ноль или более пробелов, за которыми следует слово `cat`,
 за которым следует ноль или более символов пробела.
 
 
@@ -200,9 +200,9 @@
 
 ### 2.3.2 Плюс
 
-Символ `+` соответствует одному или более повторению предыдущего символа. Например, 
-регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ, 
-следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним` t` в предложении.
+Символ `+` соответствует одному или более повторению предыдущего символа. Например,
+регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ,
+следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в предложении.
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -212,9 +212,9 @@
 
 ### 2.3.3 Знак вопроса
 
-В регулярном выражении метасимвол `?` делает предыдущий символ необязательным. 
+В регулярном выражении метасимвол `?` делает предыдущий символ необязательным.
 Этот символ соответствует нулю или одному экземпляру предыдущего символа.
-Например, регулярное выражение `[T]?he` означает  необязательную заглавную букву `T`, за которой следуют символы 'h' и 'e'.
+Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы `h` и `e`.
 
 
 "[T]he" => The car is parked in the garage.
@@ -230,9 +230,9 @@
 
 ## 2.4 Фигурные скобки
 
-В фигурных скобках, которые также называются квантификаторами, указывается, 
-сколько раз символ или группа символов могут повторяться. Например, регулярное выражение 
-`[0-9] {2,3}` означает совпадение не менее 2 но не более 3 цифр в диапазоне от 0 до 9.
+В фигурных скобках, которые также называются квантификаторами, указывается,
+сколько раз символ или группа символов могут повторяться. Например, регулярное выражение
+`[0-9]{2,3}` означает совпадение не менее 2 но не более 3 цифр в диапазоне от 0 до 9.
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -240,9 +240,9 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/juM86s/1)
 
-Уберём второй номер (цифру 3), тогда,  регулярное выражение `[0-9] {2,}` будет означать 
+Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9]{2,}` будет означать
 совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение
-`[0-9] {3}` будет означать  совпадение точно с 3 цифрами.
+`[0-9]{3}` будет означать совпадение точно с 3 цифрами.
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -260,11 +260,11 @@
 
 Скобочные группы это группы подшаблонов, которые написаны в круглых скобках
 `(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор
-после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после 
-скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab) *` соответствует
+после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после
+скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab)*` соответствует
 нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|`
 внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`,
-`g` или `p`, за которыми следуют буквы 'a' и 'r'.
+`g` или `p`, за которыми следуют буквы `a` и `r`.
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -272,15 +272,15 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/tUxrBG/1)
 
-Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке. 
+Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке.
 Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций.
 
 ### 2.5.1 Не запоминающие скобочные группы
 
 Бывает так, что группу определить нужно, а вот запоминать их содержимое в массиве не требуется.
-Подобный трюк осуществляется при помощи зарезервированной комбинации `?:` 
-в круглых скобках `(...)`. Например, регулярное выражение `(?:c|g|p)ar` будет находить такие же шаблоны как и 
-`(c|g|p)ar`, однако скобочная группа при этом создана не будет. 
+Подобный трюк осуществляется при помощи зарезервированной комбинации `?:`
+в круглых скобках `(...)`. Например, регулярное выражение `(?:c|g|p)ar` будет находить такие же шаблоны как и
+`(c|g|p)ar`, однако скобочная группа при этом создана не будет.
 
 
 "(?:c|g|p)ar" => The car is parked in the garage.
@@ -289,16 +289,16 @@
 [Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1)
 
 Не запоминающиеся группы пригодиться, когда они используются в функциях поиска и замены
-или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных, 
+или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных,
 смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
 
 ## 2.6 Альтернация
 
 В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования).
 Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что
-чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что 
+чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что
 набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений.
-Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из 'h' и 'e') и шаблон
+Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`) и шаблон
 (строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов,
 по аналогии с логической операцией ИЛИ в программировании и алгебре выражений.
 
@@ -310,13 +310,13 @@
 
 ## 2.7 Экранирование спецсимволов
 
-Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа. 
-Это позволяет формировать шаблоны с поиском зарезервированных символов, таких как `{ } [ ] / \ + * . $ ^ | ?`. 
-Для использования спецсимвола в шаблоне необходимо указать символ '\' перед ним.
+Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа.
+Это позволяет формировать шаблоны с поиском зарезервированных символов, таких как `{ } [ ] / \ + * . $ ^ | ?`.
+Для использования спецсимвола в шаблоне необходимо указать символ `\` перед ним.
 
-Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки. 
+Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки.
 Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение
-`(f|c|m)at\.?`, что соответствует следующему шаблону: строчный символ `f`, `c` или `m`,  за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
+`(f|c|m)at\.?`, что соответствует следующему шаблону: строчный символ `f`, `c` или `m`, за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
 
 
 "(f|c|m)at\.?" => The fat cat sat on the mat.
@@ -326,19 +326,19 @@
 
 ## 2.8 Якоря
 
-Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли 
+Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли
 соответствующий символ начальным или конечным символом входной строки. Якоря бывают двух типов:
 Первый тип - Каретка `^`, проверяет, является ли соответствующий символ начальным символом в тексте.
 Второй тип - Доллар `$`, проверяет, является ли соответствующий символ последним символом входной строки.
 
 ### 2.8.1 Каретка
 
-Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки. 
+Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки.
 Если мы применяем следующее регулярное выражение `^a` (если a является начальным символом) для строки `abc`,
 совпадение будет соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на той же строке,
-мы не получим совпадения, поскольку во входящей строке  `abc` "b"  не является первым символом. Рассмотрим другое
+мы не получим совпадения, поскольку во входящей строке `abc` "b" не является первым символом. Рассмотрим другое
 регулярное выражение: `^(T|t)he`, обозначающее заглавную `T` или строчную `t` как первый символ, за которым следуют
-символы букв 'h' и 'e'. Cоответственно:
+символы букв `h` и `e`. Cоответственно:
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -371,10 +371,10 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/t0AkOd/1)
 
-##  3. Наборы сокращений и диапазоны
+## 3. Наборы сокращений и диапазоны
 
 Регулярные выражения предоставляют сокращения для часто используемых наборов символов,
-которые предлагают удобные сокращения для часто используемых регулярных выражений. 
+которые предлагают удобные сокращения для часто используемых регулярных выражений.
 Наборы сокращенных символов следующие:
 
 |Сокращение|Описание|
@@ -389,12 +389,12 @@
 
 ## 4. Опережающие и ретроспективные проверки
 
-Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид 
-***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив). 
+Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид
+***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив).
 Данные проверки используются, мы знаем, что шаблон предшествует или сопровождается другим шаблоном.
 Например, мы хотим получить получить цену в долларах `$`, из следующей входной строки
 `$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
-получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют 
+получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют
 следующие виды проверок:
 
 |Символ|Описание|
@@ -407,11 +407,11 @@
 ### 4.1 Положительное опережающее условие
 
 Положительное опережающее утверждение (assert) означает, что за первой частью выражения должно следовать
-опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)). 
-Возвращенное совпадение содержит только текст, который соответствует первой части выражения. 
+опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)).
+Возвращенное совпадение содержит только текст, который соответствует первой части выражения.
 Для определения положительного опережающего условия используются круглые скобки. В этих скобках используется
-знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства. 
-Рассмотрим пример регулярного выражения:  `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`, 
+знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства.
+Рассмотрим пример регулярного выражения: `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`,
 следом буквы `h` и `e`. В скобках, мы определяем положительное опережающее условие, которое сообщает движку регулярных выражений
 информацию о том, что после шаблона `The` или `the` будет следовать слово `fat`.
 
@@ -423,7 +423,7 @@
 
 ### 4.2 Отрицательное опережающее условие
 
-Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить 
+Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить
 все совпадения из входной строки, за которыми НЕ следует определенный шаблон. Отрицательное опережающее условие
 определяется таким же образом, как и позитивное, с той лишь разницей, что вместо равенства `=` мы ставим
 восклицательный знак `!` (отрицание) например: `(?!...)`. Рассмотрим выражение `(T|t)he(?!\sfat)`, в котором мы
@@ -438,8 +438,8 @@
 ### 4.3 Положительное ретроспективное условие
 
 Положительное ретроспективное условие используется чтобы найти все совпадения, которым предшествует
-определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает, 
-найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` or `the`.
+определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает,
+найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` или `the`.
 
 
 "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -461,7 +461,7 @@
 
 ## 5. Флаги
 
-Флаги, также называемые модификаторами, изменяют вывод регулярного выражения. 
+Флаги, также называемые модификаторами, изменяют вывод регулярного выражения.
 Эти флаги могут быть использованы в любом порядке или комбинации, и являются
 неотъемлемой частью регулярных выражений.
 
@@ -474,8 +474,8 @@
 ### 5.1 Поиск без учета регистра
 
 Модификатор `i` используется для поиска без учета регистра. Например, регулярное выражение
-`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`, 
-указывающий движку регулярных выражений игнорировать регистр. Помимо  `i`, для поиска шаблона во
+`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`,
+указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во
 всем входном тексте, использован флаг `g`.
 
 
@@ -493,8 +493,8 @@
 ### 5.2 Глобальный поиск
 
 Модификатор `g` используется для выполнения глобального сопоставления (найти все совпадения, а не останавливаться после первого).
-Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`. 
-Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом 
+Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`.
+Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом
 (что является поведением по умолчанию).
 
 
@@ -513,9 +513,9 @@
 
 Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее,
 якоря `(^, $)` используются для проверки, является ли шаблон началом или концом входной строки.
-Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`.  Например, 
-регулярное выражение `/at(.)?$/gm` означает строчную  `a`, следом строчная `t` и любой
-символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм 
+Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например,
+регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой
+символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм
 регулярных выражений будет искать данный шаблон в конце каждой строки в тексте.
 
 
@@ -535,7 +535,7 @@
 [Запустить регулярное выражение](https://regex101.com/r/E88WE2/1)
 
 ## 6. Жадные vs ленивые квантификаторы
-По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет 
+По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет
 искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который
 будет стремиться быть как можно более коротким по времени.
 

From 1cde7e2d775e83462ff1b86097c579f6fc57d146 Mon Sep 17 00:00:00 2001
From: Gordon Bai 
Date: Mon, 5 Aug 2019 16:54:13 +0100
Subject: [PATCH 056/156] Correct a typo

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2dee7bc2..dd140b7f 100644
--- a/README.md
+++ b/README.md
@@ -278,7 +278,7 @@ regular expression `[0-9]{3}` means: Match exactly 3 digits.
 ## 2.5 Capturing Group
 
 A capturing group is a group of sub-patterns that is written inside Parentheses 
-`(...)`. Like As we discussed before that in regular expression if we put a quantifier 
+`(...)`. Like as we discussed before that in regular expression if we put a quantifier 
 after a character then it will repeat the preceding character. But if we put quantifier
 after a capturing group then it repeats the whole capturing group. For example,
 the regular expression `(ab)*` matches zero or more repetitions of the character

From 8dc654ae1ffafcdad9abd9c020019cac786d7771 Mon Sep 17 00:00:00 2001
From: liuyonghui <1359158019@qq.com>
Date: Tue, 6 Aug 2019 02:02:47 +0800
Subject: [PATCH 057/156] fix: correct a typo

---
 translations/README-zh-simple.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md
index ee33936d..43f55ef5 100644
--- a/translations/README-zh-simple.md
+++ b/translations/README-zh-simple.md
@@ -442,7 +442,7 @@
 
 ### 5.2 全局搜索 (Global search)
 
-修饰符 `g` 常用语执行一个全局搜索匹配, 即(不仅仅返回第一个匹配的, 而是返回全部). 
+修饰符 `g` 常用于执行一个全局搜索匹配, 即(不仅仅返回第一个匹配的, 而是返回全部). 
 例如, 表达式 `/.(at)/g` 表示搜索 任意字符(除了换行) + `at`, 并返回全部结果.
 
 

From 3538d4353494d9d7db6e6d694c4f82e61b0849c8 Mon Sep 17 00:00:00 2001
From: imyhui <1359158019@qq.com>
Date: Tue, 6 Aug 2019 09:34:20 +0800
Subject: [PATCH 058/156] fix: correct two typo errs

---
 translations/README-cn.md        | 2 +-
 translations/README-zh-simple.md | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/translations/README-cn.md b/translations/README-cn.md
index 205efc35..0ae81134 100644
--- a/translations/README-cn.md
+++ b/translations/README-cn.md
@@ -465,7 +465,7 @@
 
 ### 5.3 多行修饰符 (Multiline)
 
-多行修饰符 `m` 常用语执行一个多行匹配.
+多行修饰符 `m` 常用于执行一个多行匹配.
 
 像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 `m`.
 
diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md
index 43f55ef5..1a1736e2 100644
--- a/translations/README-zh-simple.md
+++ b/translations/README-zh-simple.md
@@ -459,7 +459,7 @@
 
 ### 5.3 多行修饰符 (Multiline)
 
-多行修饰符 `m` 常用语执行一个多行匹配. 
+多行修饰符 `m` 常用于执行一个多行匹配.
 
 像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 `m`.
 

From 8a486acafcc6963eb07f03558726090c5af03751 Mon Sep 17 00:00:00 2001
From: ImKifu 
Date: Tue, 6 Aug 2019 08:58:03 +0700
Subject: [PATCH 059/156] add vietnamese

---
 translations/README-vn.md | 619 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 619 insertions(+)
 create mode 100644 translations/README-vn.md

diff --git a/translations/README-vn.md b/translations/README-vn.md
new file mode 100644
index 00000000..e2e3918c
--- /dev/null
+++ b/translations/README-vn.md
@@ -0,0 +1,619 @@
+

+
+ + Learn Regex + +

+

+ + + + + + +

+

+ + + +## Translations: + +* [English](README.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) +* [Русский](translations/README-ru.md) +* [Vietnamese](translations/README-vn.md) + + +## Biểu thức chính quy là gì? + +> Biểu thức chính quy là một nhóm các ký tự hoặc ký hiệu được sử dụng để tìm một mẫu cụ thể từ một văn bản. + +Biểu thức chính quy là một khuôn mẫu được khớp với chuỗi các từ, từ trái sang phải. Từ "Biểu thức chính quy" là một câu cửa miệng, bạn thường sẽ tìm thấy thuật ngữ viết tắt là "regex" hoặc "regexp". Biểu thức chính quy được sử dụng để thay thế một văn bản trong một chuỗi, xác thực mẫu, trích xuất một chuỗi con từ một chuỗi dựa trên khớp mẫu và hơn thế nữa. + +Hãy tưởng tượng bạn đang viết một ứng dụng và bạn muốn đặt quy tắc khi người dùng chọn tên người dùng của họ. Chúng tôi muốn cho phép tên người dùng chứa các chữ cái, số, dấu gạch dưới và dấu gạch nối. Chúng tôi cũng muốn giới hạn số lượng ký tự trong tên người dùng để nó trông không xấu. Chúng tôi sử dụng biểu thức chính quy sau để xác thực tên người dùng: + + +

+

+ Regular expression +

+ +Trên biểu thức chính quy có thể chấp nhận các chuỗi `john_doe`, `jo-hn_doe` và `john12_as`. Nó không khớp với `Jo` vì chuỗi đó chứa chữ hoa và nó quá ngắn. + +## Table of Contents + +- [Basic Matchers](#1-basic-matchers) +- [Meta character](#2-meta-characters) + - [Full stop](#21-full-stop) + - [Character set](#22-character-set) + - [Negated character set](#221-negated-character-set) + - [Repetitions](#23-repetitions) + - [The Star](#231-the-star) + - [The Plus](#232-the-plus) + - [The Question Mark](#233-the-question-mark) + - [Braces](#24-braces) + - [Character Group](#25-character-group) + - [Alternation](#26-alternation) + - [Escaping special character](#27-escaping-special-character) + - [Anchors](#28-anchors) + - [Caret](#281-caret) + - [Dollar](#282-dollar) +- [Shorthand Character Sets](#3-shorthand-character-sets) +- [Lookaround](#4-lookaround) + - [Positive Lookahead](#41-positive-lookahead) + - [Negative Lookahead](#42-negative-lookahead) + - [Positive Lookbehind](#43-positive-lookbehind) + - [Negative Lookbehind](#44-negative-lookbehind) +- [Flags](#5-flags) + - [Case Insensitive](#51-case-insensitive) + - [Global search](#52-global-search) + - [Multiline](#53-multiline) +- [Greedy vs lazy matching](#6-greedy-vs-lazy-matching) + + +## 1. Basic Matchers + +A regular expression is just a pattern of characters that we use to perform +search in a text. For example, the regular expression `the` means: the letter +`t`, followed by the letter `h`, followed by the letter `e`. + + +Biểu thức chính quy chỉ là một mẫu các ký tự mà chúng ta sử dụng để thực hiện tìm kiếm trong văn bản. Ví dụ, biểu thức chính quy `the` có nghĩa là: chữ `t`, tiếp theo là chữ `h`, tiếp theo là chữ `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dmRygT/1) + +Biểu thức chính quy `123` khớp với chuỗi `123`. Biểu thức chính quy được khớp với chuỗi đầu vào bằng cách so sánh từng ký tự trong biểu thức chính quy với từng ký tự trong chuỗi đầu vào, lần lượt từng ký tự. Biểu thức chính quy thường phân biệt chữ hoa chữ thường nên biểu thức chính quy `The` sẽ không khớp với chuỗi `the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/1paXsy/1) + +## 2. Meta Characters + +Các ký tự `meta` là các khối xây dựng của các biểu thức chính quy. Các ký tự `meta` không biểu diễn chính nó mà thay vào đó được diễn giải theo một cách đặc biệt nào đó. Một số ký tự `meta` có ý nghĩa đặc biệt và được viết bên trong dấu ngoặc vuông. Các ký tự meta như sau: + +|Meta character|Description| +|:----:|----| +|.|Khớp với tất cả các kí tự trừ dấu xuống dòng.| +|[ ]|Lớp kí tự. Khớp với bất kỳ ký tự nào nằm giữa dấu ngoặc vuông.| +|[^ ]|Lớp kí tự phủ định. Khớp với bất kỳ ký tự nào không có trong dấu ngoặc vuông.| +|*|Khớp 0 hoặc nhiều lần lặp lại của kí tự trước.| +|+|Khớp 1 hoặc nhiều lần lặp lại của kí tự trước.| +|?|Làm cho kí tự trước tùy chọn.| +|{n,m}|Braces. Khớp ít nhất là "n" nhưng không nhiều hơn "m" lặp lại của kí tự trước.| +|(xyz)|Nhóm kí tự. Khớp các ký tự xyz theo thứ tự chính xác đó.| +|||Thay thế. Khớp các ký tự trước hoặc ký tự sau ký hiệu.| +|\|Thoát khỏi kí tự tiếp theo. Điều này cho phép bạn khớp các ký tự dành riêng [ ] ( ) { } . * + ? ^ $ \ || +|^|Khớp với sự bắt đầu của đầu vào.| +|$|Khớp với kết thúc đầu vào.| + +## 2.1 Full stop + + +Full stop `.` là ví dụ đơn giản nhất về ký tự meta. Kí tự meta `.` +khớp với bất kì kí tự nào. Nó sẽ không khớp kí tự trả về (return) hoặc xuống dòng (newline) + +Ví dụ, biểu thức chính quy `.ar` có ý nghĩa: bất kỳ ký tự nào, theo sau là chữ `a`, tiếp theo là chữ `r`. + +
+".ar" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/xc9GkU/1) + +## 2.2 Character set + +Bộ ký tự cũng được gọi là lớp kí tự. Dấu ngoặc vuông được sử dụng để chỉ định bộ ký tự. Sử dụng dấu gạch nối bên trong bộ ký tự để chỉ định phạm vi của các ký tự. Thứ tự của phạm vi ký tự trong dấu ngoặc vuông không quan trọng. + +Ví dụ: biểu thức chính quy `[Tt]he` có nghĩa là: chữ hoa `T` hoặc chữ thường `t`, theo sau là chữ `h`, tiếp theo là chữ `e`. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/2ITLQ4/1) + + +Tuy nhiên, khoảng thời gian bên trong một bộ ký tự có nghĩa là một khoảng thời gian theo nghĩa đen. Biểu thức chính quy `ar[.]` Có nghĩa là: ký tự chữ thường `a`, theo sau là chữ `r`, theo sau là kí tự `.` . + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Test the regular expression](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Negated character set + +Nói chung, biểu tượng dấu mũ biểu thị sự bắt đầu của chuỗi, nhưng khi nó được gõ sau dấu ngoặc vuông mở, nó sẽ phủ định bộ ký tự. Ví dụ: biểu thức chính quy `[^ c]ar` có nghĩa là: bất kỳ ký tự nào ngoại trừ `c`, theo sau là ký tự `a`, theo sau là chữ `r`. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/nNNlq3/1) + + + + +## 2.3 Repetitions + +Theo dõi các ký tự meta, `+`, `*` hoặc `?` được sử dụng để xác định số lần mô hình con (subpattern) có thể xảy ra. Những kí tự meta này hành động khác nhau trong các tình huống khác nhau. + + +### 2.3.1 The Star + +Biểu tượng `*` khớp 0 hoặc nhiều lần lặp lại của trình so khớp trước. Biểu thức chính quy `a*` có nghĩa là: 0 hoặc nhiều lần lặp lại ký tự chữ thường trước `a`. Nhưng nếu nó xuất hiện sau một bộ ký tự hoặc lớp thì nó sẽ tìm thấy sự lặp lại của toàn bộ bộ ký tự. Ví dụ: biểu thức chính quy `[a-z]*` có nghĩa là: bất kỳ số lượng chữ cái viết thường trong một hàng. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Test the regular expression](https://regex101.com/r/7m8me5/1) + +Biểu tượng `*` có thể được sử dụng với ký tự meta. để khớp với bất kỳ chuỗi ký tự nào `.*` . Biểu tượng `*` có thể được sử dụng với ký tự khoảng trắng `\s` để khớp với một chuỗi các ký tự khoảng trắng. + +Ví dụ: biểu thức `\s*cat\s*` có nghĩa là: không hoặc nhiều khoảng trắng, theo sau là ký tự chữ thường `c`, theo sau là ký tự chữ thường `a`, theo sau là ký tự chữ thường `t`, tiếp theo là 0 hoặc nhiều khoảng trắng. + + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Test the regular expression](https://regex101.com/r/gGrwuz/1) + + + + +### 2.3.2 The Plus + +The symbol `+` matches one or more repetitions of the preceding character. For +example, the regular expression `c.+t` means: lowercase letter `c`, followed by +at least one character, followed by the lowercase character `t`. It needs to be +clarified that `t` is the last `t` in the sentence. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 The Question Mark + +Trong biểu thức chính quy các ký tự meta `?` làm cho ký tự trước là một tùy chọn. Biểu tượng này khớp với 0 hoặc một thể hiện (instance ) của ký tự trước. Ví dụ: biểu thức chính quy `[T]?he` có nghĩa là: Tùy chọn chữ hoa chữ `T`, theo sau là ký tự chữ thường `h`, tiếp theo là ký tự chữ thường `e`. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/kPpO2x/1) + + +## 2.4 Braces + + +Trong các dấu ngoặc nhọn thông thường còn được gọi là bộ định lượng được sử dụng để chỉ định số lần mà một ký tự hoặc một nhóm ký tự có thể được lặp lại. Ví dụ: biểu thức chính quy `[0-9]{2,3}` có nghĩa là: Ghép ít nhất 2 chữ số nhưng không quá 3 (ký tự trong phạm vi từ 0 đến 9). + + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/juM86s/1) + + +Chúng ta có thể bỏ qua số thứ hai. Ví dụ: biểu thức chính quy `[0-9]{2,}` có nghĩa là: Ghép 2 chữ số trở lên. Nếu chúng tôi cũng xóa dấu phẩy, biểu thức chính quy `[0-9]{3}` có nghĩa là: Ghép chính xác 3 chữ số. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Sivu30/1) + + +## 2.5 Capturing Group + +A capturing group is a group of sub-patterns that is written inside Parentheses +`(...)`. Like As we discussed before that in regular expression if we put a quantifier +after a character then it will repeat the preceding character. But if we put quantifier +after a capturing group then it repeats the whole capturing group. For example, +the regular expression `(ab)*` matches zero or more repetitions of the character +"ab". We can also use the alternation `|` meta character inside capturing group. +For example, the regular expression `(c|g|p)ar` means: lowercase character `c`, +`g` or `p`, followed by character `a`, followed by character `r`. + + +Một nhóm capturing là một nhóm các mẫu con được viết bên trong Dấu ngoặc đơn `(...)`. Giống như chúng ta đã thảo luận trước đó trong biểu thức chính quy nếu chúng ta đặt một bộ định lượng sau một ký tự thì nó sẽ lặp lại ký tự trước. Nhưng nếu chúng ta đặt bộ định lượng sau một nhóm capturing thì nó lặp lại toàn bộ nhóm capturing. Ví dụ: biểu thức chính quy `(ab)*` khớp với 0 hoặc nhiều lần lặp lại của ký tự "ab". Chúng ta cũng có thể sử dụng luân phiên `|` kí tự meta trong nhóm capturing. Ví dụ: biểu thức chính quy `(c|g|p)ar` có nghĩa là: ký tự chữ thường `c`, `g` hoặc `p`, theo sau là ký tự `a`, tiếp theo là ký tự `r`. + + + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/tUxrBG/1) + +Note that capturing groups do not only match but also capture the characters for use in +the parent language. The parent language could be python or javascript or virtually any +language that implements regular expressions in a function definition. + + +Lưu ý rằng các nhóm capturing không chỉ khớp mà còn capturing các ký tự để sử dụng trong ngôn ngữ gốc. Ngôn ngữ gốc có thể là python hoặc javascript hoặc hầu như bất kỳ ngôn ngữ nào thực hiện các biểu thức chính quy trong định nghĩa hàm. + + +### 2.5.1 Non-capturing group + +A non-capturing group is a capturing group that only matches the characters, but +does not capture the group. A non-capturing group is denoted by a `?` followed by a `:` +within parenthesis `(...)`. For example, the regular expression `(?:c|g|p)ar` is similar to +`(c|g|p)ar` in that it matches the same characters but will not create a capture group. + + + +Nhóm không capturing là nhóm capturing chỉ khớp với các ký tự, nhưng không capturing được nhóm. Một nhóm không capturing được ký hiệu là `?` theo sau là `:` trong ngoặc đơn `(...)`. + +Ví dụ: biểu thức chính quy `(?:c|g|p)ar` tương tự như `(c|g|p)ar` ở chỗ nó khớp với các ký tự giống nhau nhưng sẽ không tạo nhóm capturing. + +
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/Rm7Me8/1) + +Các nhóm không capturing có thể có ích khi được sử dụng trong chức năng tìm và thay thế hoặc khi trộn với các nhóm capturing để giữ tổng quan khi sản xuất bất kỳ loại đầu ra nào khác. Xem thêm [4. Lookaround](#4-lookaround). + + +## 2.6 Alternation + +Trong một biểu thức chính quy, thanh dọc `|` được sử dụng để xác định xen kẽ. Sự xen kẽ giống như một câu lệnh OR giữa nhiều biểu thức. Bây giờ, bạn có thể nghĩ rằng bộ ký tự và luân phiên hoạt động theo cùng một cách. Nhưng sự khác biệt lớn giữa bộ ký tự và xen kẽ là bộ ký tự hoạt động ở cấp độ ký tự nhưng xen kẽ hoạt động ở cấp độ biểu thức. + +Ví dụ: biểu thức chính quy `(T|t)he|car` có nghĩa là: hoặc (ký tự chữ `T` hoặc chữ thường `t`, theo sau là ký tự chữ thường `h`, tiếp theo là ký tự chữ thường `e`) OR (ký tự chữ thường `c`, tiếp theo là ký tự chữ thường `a`, theo sau bằng ký tự viết thường `r`). Lưu ý rằng tôi đặt dấu ngoặc đơn cho rõ ràng, để cho thấy rằng một trong hai biểu thức trong ngoặc đơn có thể được đáp ứng và nó sẽ khớp. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/fBXyX0/1) + +## 2.7 Escaping special character + +Backslash `\` is used in regular expression to escape the next character. This +allows us to specify a symbol as a matching character including reserved +characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching +character prepend `\` before it. + +For example, the regular expression `.` is used to match any character except +newline. Now to match `.` in an input string the regular expression +`(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase +character `a`, followed by lowercase letter `t`, followed by optional `.` +character. + + +Dấu gạch chéo ngược `\` được sử dụng trong biểu thức chính quy để thoát ký tự tiếp theo. Điều này cho phép chúng tôi chỉ định một biểu tượng là một ký tự phù hợp bao gồm các ký tự dành riêng `{} [] / \ *. $ ^ | ?` . Để sử dụng một ký tự đặc biệt, ta dùng `\` làm ký tự trùng khớp trước kí tự ta muốn dùng. + +Ví dụ, biểu thức chính quy `.` được sử dụng để khớp với bất kỳ ký tự nào ngoại trừ dòng mới. Bây giờ để phù hợp `.` trong một chuỗi đầu vào, biểu thức chính quy `(f|c|m)at\.?` có nghĩa là: chữ thường `f`, `c` hoặc `m`, theo sau là ký tự chữ thường `a`, tiếp theo là chữ thường chữ `t`, theo sau là tùy chọn `.` tính cách. + + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/DOc5Nu/1) + + +## 2.8 Anchors + + +Trong các biểu thức chính quy, chúng tôi sử dụng các anchors để kiểm tra xem biểu tượng phù hợp là biểu tượng bắt đầu hay biểu tượng kết thúc của chuỗi đầu vào. Các anchors có hai loại: Loại thứ nhất là Caret `^` kiểm tra xem ký tự khớp có phải là ký tự bắt đầu của đầu vào không và loại thứ hai là Dollar `$` kiểm tra xem ký tự khớp có phải là ký tự cuối cùng của chuỗi đầu vào không. + + + + +### 2.8.1 Caret + + +Biểu tượng Caret `^` được sử dụng để kiểm tra xem ký tự khớp có phải là ký tự đầu tiên của chuỗi đầu vào không. Nếu chúng ta áp dụng biểu thức chính quy sau `^a` ( nếu a là ký hiệu bắt đầu) cho chuỗi đầu vào `abc` thì nó khớp với `a`. Nhưng nếu chúng ta áp dụng biểu thức chính quy `^b` trên chuỗi đầu vào ở trên thì nó không khớp với bất cứ thứ gì. Bởi vì trong chuỗi đầu vào `abc` "b" không phải là ký hiệu bắt đầu. Chúng ta hãy xem một biểu thức chính quy khác `^(T|t)he` có nghĩa là: ký tự chữ hoa `T` hoặc ký tự chữ thường `t` là ký hiệu bắt đầu của chuỗi đầu vào, tiếp theo là ký tự chữ thường `h`, tiếp theo là ký tự chữ thường `e`. + + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Dollar + + +Biểu tượng Dollar `$` được sử dụng để kiểm tra xem ký tự khớp có phải là ký tự cuối cùng của chuỗi đầu vào không. Ví dụ: biểu thức chính quy `(at\.)$` có nghĩa là: ký tự chữ thường `a`, theo sau là ký tự chữ thường `t`, theo sau là `.` ký tự và bộ so khớp phải là cuối chuỗi. + + + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/t0AkOd/1) + +## 3. Shorthand Character Sets + + + +Biểu thức chính quy cung cấp các shorthand cho các bộ ký tự thường được sử dụng, cung cấp các shorthand thuận tiện cho các biểu thức thông thường được sử dụng. Các bộ ký tự shorthand như sau: + + +|Shorthand|Description| +|:----:|----| +|.| Bất kỳ kí tự nào ngoại trừ dòng mới| +|\w|Khớp các ký tự chữ và số: `[a-zA-Z0-9_]`| +|\W|Khớp các ký tự không phải chữ và số: `[^\w]`| +|\d|khớp với số trong khoảng: `[0-9]`| +|\D|Khớp không có chữ số: `[^\d]`| +|\s|Khớp các ký tự khoảng trắng: `[\t\n\f\r\p{Z}]`| +|\S|Khớp với ký tự không phải khoảng trắng: `[^\s]`| + +## 4. Lookaround + +Lookbehind và lookahead (còn được gọi là lookaround) là các loại nhóm ***không capturing*** cụ thể (Được sử dụng để khớp với mẫu nhưng không được bao gồm trong danh sách phù hợp). `Lookarounds` sử dụng khi chúng ta có điều kiện mẫu này được đi trước hoặc theo sau bởi một mẫu khác. + +Ví dụ: chúng tôi muốn nhận tất cả các số có trước ký tự `$` từ chuỗi đầu vào sau `$4,44 và $10,88`. Chúng tôi sẽ sử dụng biểu thức chính quy sau `(?<=\$)[0-9\.]*` có nghĩa là: lấy tất cả các số có chứa `.` ký tự và đứng trước ký tự `$`. Sau đây là những cái nhìn được sử dụng trong các biểu thức thông thường: + +|Kí hiệu|Mô tả| +|:----:|----| +|?=|Positive Lookahead| +|?!|Negative Lookahead| +|?<=|Positive Lookbehind| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. +
+ +[Test the regular expression](https://regex101.com/r/IDDARt/1) + +### 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 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 +from input string that are not followed by the word `fat` precedes by a space +character. + + + + + + +`Negative lookahead` được sử dụng khi chúng ta cần lấy tất cả các kết quả khớp từ chuỗi đầu vào không được theo sau bởi một mẫu. `Negative lookahead` được định nghĩa giống như chúng ta định nghĩa `positive lookahead` nhưng sự khác biệt duy nhất là thay vì bằng ký tự `=` chúng ta sử dụng kí tự phủ định `!` tức là `(?! ...)`. + +Chúng ta hãy xem biểu thức chính quy sau đây: `(T|t)he(?!\sfat)` có nghĩa là: lấy tất cả các từ `The` hoặc `the` từ chuỗi đầu vào không được đứng trước bởi từ `fat` trước một ký tự khoảng trắng. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/V32Npg/1) + +### 4.3 Positive Lookbehind + +`Positive lookbehind` được sử dụng để có được tất cả mẫu khớp cái mà theo sau bởi một mẫu cụ thể. `Positive lookbehind` được biểu thị bởi `(?<=...)`. + +Ví dụ: biểu thức chính quy `(?<=(T|t)he\s)(fat|mat)` có nghĩa là: lấy tất cả các từ `fat` hoặc `mat` từ chuỗi đầu vào, cái mà sau từ `The` hoặc `the`. + + + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/avH165/1) + +### 4.4 Negative Lookbehind + + +`Negative lookbehind` được sử dụng để có được tất cả các từ khớp không có trước một mẫu cụ thể. `Negative lookbehind` được ký hiệu là `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. +
+ +[Test the regular expression](https://regex101.com/r/8Efx5G/1) + +## 5. Flags + +Flags are also called modifiers because they modify the output of a regular +expression. These flags can be used in any order or combination, and are an +integral part of the RegExp. + + +Cờ (flags) cũng được gọi là bổ nghĩa (modifiers) vì chúng sửa đổi đầu ra của biểu thức chính quy. Các cờ này có thể được sử dụng theo bất kỳ thứ tự hoặc kết hợp nào và là một phần không thể thiếu của RegExp. + + + +|Cờ|Mô tả| +|:------:|----| +|i|Case insensitive: Đặt khớp với mẫu không phân biệt chữ hoa chữ thường.| +|g|Global Search: Tìm kiếm một mẫu trong suốt chuỗi đầu vào.| +|m|Multiline: ký tự Anchor meta hoạt động trên mỗi dòng.| + +### 5.1 Case Insensitive + +The `i` modifier is used to perform case-insensitive matching. For example, the +regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase +character `h`, followed by character `e`. And at the end of regular expression +the `i` flag tells the regular expression engine to ignore the case. As you can +see we also provided `g` flag because we want to search for the pattern in the +whole input string. + + + +Công cụ sửa đổi `i` được sử dụng để thực hiện khớp không phân biệt chữ hoa chữ thường. + +Ví dụ: biểu thức chính quy `/The/gi` có nghĩa là: chữ hoa chữ `T`, theo sau là ký tự chữ thường `h`, tiếp theo là ký tự `e`. Và ở cuối biểu thức chính quy, cờ `i` báo cho công cụ biểu thức chính quy bỏ qua trường hợp này. Như bạn có thể thấy, chúng tôi cũng đã cung cấp cờ `g` vì chúng tôi muốn tìm kiếm mẫu trong toàn bộ chuỗi đầu vào. + +
+"The" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/ahfiuh/1) + +### 5.2 Global search + + +Công cụ sửa đổi `g` được sử dụng để thực hiện khớp toàn cầu (tìm tất cả các từ có thể khớp thay vì dừng sau lần khớp đầu tiên). + +Ví dụ: biểu thức chính quy `/.(at)/g` có nghĩa là: bất kỳ ký tự nào ngoại trừ dòng mới, theo sau là ký tự chữ thường `a`, tiếp theo là ký tự chữ thường `t`. Vì chúng tôi đã cung cấp cờ `g` ở cuối biểu thức chính quy nên bây giờ nó sẽ tìm thấy tất cả các kết quả khớp trong chuỗi đầu vào, không chỉ là đầu tiên (là hành vi mặc định). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dO1nef/1) + +### 5.3 Multiline + + +Công cụ sửa đổi `m` được sử dụng để thực hiện khớp nhiều dòng. Như chúng ta đã thảo luận về các anchors `(^, $)` trước đó, được sử dụng để kiểm tra xem mẫu là phần đầu của phần đầu vào hay phần cuối của chuỗi đầu vào. Nhưng nếu chúng ta muốn các anchors hoạt động trên mỗi dòng, chúng ta sử dụng cờ `m`. + +Ví dụ: biểu thức chính quy `/at(.)?$/gm` có nghĩa là: ký tự chữ thường `a`, theo sau là ký tự chữ thường `t`, tùy chọn mọi thứ trừ dòng mới. Và vì cờ `m` bây giờ công cụ biểu thức chính quy khớp với mẫu ở cuối mỗi dòng trong một chuỗi. + + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/E88WE2/1) + + + + +## 6. Greedy vs lazy matching +By default regex will do greedy matching , means it will match as long as +possible. we can use `?` to match in lazy way means as short as possible + + +Theo mặc định, regex sẽ thực hiện greedy matching, có nghĩa là nó sẽ khớp càng lâu càng tốt. chúng ta có thể sử dụng `?` để khớp theo cách lười biếng có nghĩa là càng ngắn càng tốt + + + + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Test the regular expression](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[Test the regular expression](https://regex101.com/r/AyAdgJ/2) + + +## Contribution + +* Open pull request with improvements +* Discuss ideas in issues +* Spread the word +* Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## License + +MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) + + + + + + From 182e2afbbeed976e2d5622314c24ff465013fa1d Mon Sep 17 00:00:00 2001 From: ImKifu Date: Tue, 6 Aug 2019 09:00:14 +0700 Subject: [PATCH 060/156] add vietnamese --- translations/README-vn.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/translations/README-vn.md b/translations/README-vn.md index e2e3918c..86cf6326 100644 --- a/translations/README-vn.md +++ b/translations/README-vn.md @@ -42,11 +42,14 @@ Biểu thức chính quy là một khuôn mẫu được khớp với chuỗi c Hãy tưởng tượng bạn đang viết một ứng dụng và bạn muốn đặt quy tắc khi người dùng chọn tên người dùng của họ. Chúng tôi muốn cho phép tên người dùng chứa các chữ cái, số, dấu gạch dưới và dấu gạch nối. Chúng tôi cũng muốn giới hạn số lượng ký tự trong tên người dùng để nó trông không xấu. Chúng tôi sử dụng biểu thức chính quy sau để xác thực tên người dùng: +

Regular expression

+ + Trên biểu thức chính quy có thể chấp nhận các chuỗi `john_doe`, `jo-hn_doe` và `john12_as`. Nó không khớp với `Jo` vì chuỗi đó chứa chữ hoa và nó quá ngắn. ## Table of Contents From e7498c48de52e8f22c666523b2bca0b5df9d8fba Mon Sep 17 00:00:00 2001 From: ImKifu Date: Tue, 6 Aug 2019 09:01:39 +0700 Subject: [PATCH 061/156] add vietnamese --- translations/README-vn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-vn.md b/translations/README-vn.md index 86cf6326..7b0b43c4 100644 --- a/translations/README-vn.md +++ b/translations/README-vn.md @@ -45,7 +45,7 @@ Hãy tưởng tượng bạn đang viết một ứng dụng và bạn muốn đ

- Regular expression + Regular expression

From bfb63e9b75cd6e2761e9464a3882e02fdecfcf6d Mon Sep 17 00:00:00 2001 From: ImKifu Date: Tue, 6 Aug 2019 09:07:10 +0700 Subject: [PATCH 062/156] add vietnamese --- translations/README-vn.md | 71 +++------------------------------------ 1 file changed, 5 insertions(+), 66 deletions(-) diff --git a/translations/README-vn.md b/translations/README-vn.md index 7b0b43c4..6ca8470d 100644 --- a/translations/README-vn.md +++ b/translations/README-vn.md @@ -85,10 +85,6 @@ Trên biểu thức chính quy có thể chấp nhận các chuỗi `john_doe`, ## 1. Basic Matchers -A regular expression is just a pattern of characters that we use to perform -search in a text. For example, the regular expression `the` means: the letter -`t`, followed by the letter `h`, followed by the letter `e`. - Biểu thức chính quy chỉ là một mẫu các ký tự mà chúng ta sử dụng để thực hiện tìm kiếm trong văn bản. Ví dụ, biểu thức chính quy `the` có nghĩa là: chữ `t`, tiếp theo là chữ `h`, tiếp theo là chữ `e`. @@ -204,10 +200,11 @@ Ví dụ: biểu thức `\s*cat\s*` có nghĩa là: không hoặc nhiều khoả ### 2.3.2 The Plus -The symbol `+` matches one or more repetitions of the preceding character. For -example, the regular expression `c.+t` means: lowercase letter `c`, followed by -at least one character, followed by the lowercase character `t`. It needs to be -clarified that `t` is the last `t` in the sentence. + +Biểu tượng `+` khớp với một hoặc nhiều lần lặp lại của ký tự trước. + +Ví dụ: biểu thức chính quy `c.+t` có nghĩa là: chữ thường chữ `c`, theo sau là ít nhất một ký tự, tiếp theo là ký tự chữ thường `t`. Nó cần phải được làm rõ rằng `t` là `t` cuối cùng trong câu. +
 "c.+t" => The fat cat sat on the mat.
@@ -262,16 +259,6 @@ Chúng ta có thể bỏ qua số thứ hai. Ví dụ: biểu thức chính quy
 
 ## 2.5 Capturing Group
 
-A capturing group is a group of sub-patterns that is written inside Parentheses 
-`(...)`. Like As we discussed before that in regular expression if we put a quantifier 
-after a character then it will repeat the preceding character. But if we put quantifier
-after a capturing group then it repeats the whole capturing group. For example,
-the regular expression `(ab)*` matches zero or more repetitions of the character
-"ab". We can also use the alternation `|` meta character inside capturing group.
-For example, the regular expression `(c|g|p)ar` means: lowercase character `c`,
-`g` or `p`, followed by character `a`, followed by character `r`.
-
-
 Một nhóm capturing là một nhóm các mẫu con được viết bên trong Dấu ngoặc đơn `(...)`. Giống như chúng ta đã thảo luận trước đó trong biểu thức chính quy nếu chúng ta đặt một bộ định lượng sau một ký tự thì nó sẽ lặp lại ký tự trước. Nhưng nếu chúng ta đặt bộ định lượng sau một nhóm capturing thì nó lặp lại toàn bộ nhóm capturing. Ví dụ: biểu thức chính quy `(ab)*` khớp với 0 hoặc nhiều lần lặp lại của ký tự "ab". Chúng ta cũng có thể sử dụng luân phiên `|` kí tự meta trong nhóm capturing. Ví dụ: biểu thức chính quy `(c|g|p)ar` có nghĩa là: ký tự chữ thường `c`, `g` hoặc `p`, theo sau là ký tự `a`, tiếp theo là ký tự `r`.
 
 
@@ -282,23 +269,12 @@ Một nhóm capturing là một nhóm các mẫu con được viết bên trong
 
 [Test the regular expression](https://regex101.com/r/tUxrBG/1)
 
-Note that capturing groups do not only match but also capture the characters for use in 
-the parent language. The parent language could be python or javascript or virtually any
-language that implements regular expressions in a function definition.
-
 
 Lưu ý rằng các nhóm capturing không chỉ khớp mà còn capturing các ký tự để sử dụng trong ngôn ngữ gốc. Ngôn ngữ gốc có thể là python hoặc javascript hoặc hầu như bất kỳ ngôn ngữ nào thực hiện các biểu thức chính quy trong định nghĩa hàm.
 
 
 ### 2.5.1 Non-capturing group
 
-A non-capturing group is a capturing group that only matches the characters, but 
-does not capture the group. A non-capturing group is denoted by a `?` followed by a `:` 
-within parenthesis `(...)`. For example, the regular expression `(?:c|g|p)ar` is similar to 
-`(c|g|p)ar` in that it matches the same characters but will not create a capture group.
-
-
-
 Nhóm không capturing là nhóm capturing chỉ khớp với các ký tự, nhưng không capturing được nhóm. Một nhóm không capturing được ký hiệu là `?` theo sau là `:` trong ngoặc đơn `(...)`. 
 
 Ví dụ: biểu thức chính quy `(?:c|g|p)ar` tương tự như `(c|g|p)ar` ở chỗ nó khớp với các ký tự giống nhau nhưng sẽ không tạo nhóm capturing.
@@ -326,17 +302,6 @@ Ví dụ: biểu thức chính quy `(T|t)he|car` có nghĩa là: hoặc (ký t
 
 ## 2.7 Escaping special character
 
-Backslash `\` is used in regular expression to escape the next character. This
-allows us to specify a symbol as a matching character including reserved
-characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching
-character prepend `\` before it.
-
-For example, the regular expression `.` is used to match any character except
-newline. Now to match `.` in an input string the regular expression
-`(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase
-character `a`, followed by lowercase letter `t`, followed by optional `.`
-character.
-
 
 Dấu gạch chéo ngược `\` được sử dụng trong biểu thức chính quy để thoát ký tự tiếp theo. Điều này cho phép chúng tôi chỉ định một biểu tượng là một ký tự phù hợp bao gồm các ký tự dành riêng `{} [] / \ *. $ ^ | ?` . Để sử dụng một ký tự đặc biệt, ta dùng `\` làm ký tự trùng khớp trước kí tự ta muốn dùng.
 
@@ -441,18 +406,6 @@ Ví dụ: biểu thức chính quy `(T|t)he(?=\Sfat)` có nghĩa là: tùy ý kh
 
 ### 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 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
-from input string that are not followed by the word `fat` precedes by a space
-character.
-
-
-
-
-
 
 `Negative lookahead` được sử dụng khi chúng ta cần lấy tất cả các kết quả khớp từ chuỗi đầu vào không được theo sau bởi một mẫu. `Negative lookahead` được định nghĩa giống như chúng ta định nghĩa `positive lookahead` nhưng sự khác biệt duy nhất là thay vì bằng ký tự `=` chúng ta sử dụng kí tự phủ định `!`  tức là `(?! ...)`. 
 
@@ -493,10 +446,6 @@ Ví dụ: biểu thức chính quy `(?
Date: Wed, 7 Aug 2019 12:37:06 +0300
Subject: [PATCH 063/156] Update Turkish Translations
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Ogün Karakuş 
---
 translations/README-tr.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-tr.md b/translations/README-tr.md
index 094456d0..0195d255 100644
--- a/translations/README-tr.md
+++ b/translations/README-tr.md
@@ -552,7 +552,7 @@ için `g` işaretini ayrıca belirtiyoruz.
 "/.(at)/" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/jnk6gM/1) +[Düzenli ifadeyi test edin](https://regex101.com/r/jnk6gM/1)
 "/.(at)/g" => The fat cat sat on the mat.

From 7907bf7a879ea43015a9d81cd7ef4e0c7ae5e57e Mon Sep 17 00:00:00 2001
From: Kevin Pallikunnel 
Date: Fri, 9 Aug 2019 09:34:13 -0500
Subject: [PATCH 064/156] fixed image with spelling error

---
 img/regexp-en.png | Bin 32399 -> 26931 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/img/regexp-en.png b/img/regexp-en.png
index c38c90fb009dd72770ec7c32f5323ed968b5b07e..46b1a0b93ca7c036b10a4f2a7fd9a2a5a591fdea 100644
GIT binary patch
literal 26931
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
ZjtDY56v1G_i;jM?JZ5WFYT|P9e*o(lYz_bb

literal 32399
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
KpE1FA{eJ-|l+%p>


From fec4133b862c4fa3dd9c0dbf412157befee7526c Mon Sep 17 00:00:00 2001
From: Johnny 
Date: Fri, 9 Aug 2019 10:33:19 -0700
Subject: [PATCH 065/156] Add vietnamese link and fix relative links

---
 README.md                        |  1 +
 translations/README-cn.md        |  3 ++-
 translations/README-es.md        |  1 +
 translations/README-fr.md        |  3 ++-
 translations/README-gr.md        |  3 ++-
 translations/README-hu.md        |  3 ++-
 translations/README-ja.md        |  3 ++-
 translations/README-ko.md        |  3 ++-
 translations/README-pl.md        |  3 ++-
 translations/README-pt_BR.md     |  3 ++-
 translations/README-ru.md        |  1 +
 translations/README-tr.md        |  3 ++-
 translations/README-vn.md        | 26 +++++++++++++-------------
 translations/README-zh-simple.md |  3 ++-
 14 files changed, 36 insertions(+), 23 deletions(-)

diff --git a/README.md b/README.md
index dd140b7f..3a5c0557 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,7 @@
 * [Magyar](translations/README-hu.md)
 * [Polish](translations/README-pl.md)
 * [Русский](translations/README-ru.md)
+* [Tiếng Việt](translations/README-vn.md)
 
 ## What is Regular Expression?
 
diff --git a/translations/README-cn.md b/translations/README-cn.md
index 0ae81134..6cce5dee 100644
--- a/translations/README-cn.md
+++ b/translations/README-cn.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## 什么是正则表达式?
 
diff --git a/translations/README-es.md b/translations/README-es.md
index a65a5fed..dbb8f29a 100644
--- a/translations/README-es.md
+++ b/translations/README-es.md
@@ -29,6 +29,7 @@
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
 * [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## 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.
diff --git a/translations/README-fr.md b/translations/README-fr.md
index ab245d9d..4d495e97 100644
--- a/translations/README-fr.md
+++ b/translations/README-fr.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## Qu'est-ce qu'une expression régulière?
 
diff --git a/translations/README-gr.md b/translations/README-gr.md
index a59eec5c..7d62a6e6 100644
--- a/translations/README-gr.md
+++ b/translations/README-gr.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## Τι είναι μια Κανονική Έκφραση (Regular Expression);
 
diff --git a/translations/README-hu.md b/translations/README-hu.md
index ffed4dbb..1017260f 100644
--- a/translations/README-hu.md
+++ b/translations/README-hu.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## Mi az a reguláris kifejezés?
 
diff --git a/translations/README-ja.md b/translations/README-ja.md
index e59a73b7..cb8df84a 100644
--- a/translations/README-ja.md
+++ b/translations/README-ja.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## 正規表現とは
 
diff --git a/translations/README-ko.md b/translations/README-ko.md
index c88b8fa6..05ae2977 100644
--- a/translations/README-ko.md
+++ b/translations/README-ko.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## 정규표현식이란 무엇인가?
 
diff --git a/translations/README-pl.md b/translations/README-pl.md
index a0cc5a70..c5213f51 100644
--- a/translations/README-pl.md
+++ b/translations/README-pl.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## Co to jest wyrażenie regularne?
 
diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md
index 1aaf7a4a..90170f48 100644
--- a/translations/README-pt_BR.md
+++ b/translations/README-pt_BR.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## O que é uma Expressão Regular?
 
diff --git a/translations/README-ru.md b/translations/README-ru.md
index f1d10605..8e7ccdea 100644
--- a/translations/README-ru.md
+++ b/translations/README-ru.md
@@ -28,6 +28,7 @@
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
 * [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## Что такое Регулярное выражение?
 
diff --git a/translations/README-tr.md b/translations/README-tr.md
index 0195d255..8e601187 100644
--- a/translations/README-tr.md
+++ b/translations/README-tr.md
@@ -28,7 +28,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## Düzenli İfade Nedir?
 
diff --git a/translations/README-vn.md b/translations/README-vn.md
index 6ca8470d..60c51e8d 100644
--- a/translations/README-vn.md
+++ b/translations/README-vn.md
@@ -18,19 +18,19 @@
 
 ## Translations:
 
-* [English](README.md)
-* [Español](translations/README-es.md)
-* [Français](translations/README-fr.md)
-* [Português do Brasil](translations/README-pt_BR.md)
-* [中文版](translations/README-cn.md)
-* [日本語](translations/README-ja.md)
-* [한국어](translations/README-ko.md)
-* [Turkish](translations/README-tr.md)
-* [Greek](translations/README-gr.md)
-* [Magyar](translations/README-hu.md)
-* [Polish](translations/README-pl.md)
-* [Русский](translations/README-ru.md)
-* [Vietnamese](translations/README-vn.md)
+* [English](../README.md)
+* [Español](../translations/README-es.md)
+* [Français](../translations/README-fr.md)
+* [Português do Brasil](../translations/README-pt_BR.md)
+* [中文版](../translations/README-cn.md)
+* [日本語](../translations/README-ja.md)
+* [한국어](../translations/README-ko.md)
+* [Turkish](../translations/README-tr.md)
+* [Greek](../translations/README-gr.md)
+* [Magyar](../translations/README-hu.md)
+* [Polish](../translations/README-pl.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 
 ## Biểu thức chính quy là gì?
diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md
index 1a1736e2..8ee4847d 100644
--- a/translations/README-zh-simple.md
+++ b/translations/README-zh-simple.md
@@ -27,7 +27,8 @@
 * [Greek](../translations/README-gr.md)
 * [Magyar](../translations/README-hu.md)
 * [Polish](../translations/README-pl.md)
-* [Русский](translations/README-ru.md)
+* [Русский](../translations/README-ru.md)
+* [Tiếng Việt](../translations/README-vn.md)
 
 ## 什么是正则表达式?
  

From 88c778f971d04bf70a11bdeb03ebbcab36a9ead2 Mon Sep 17 00:00:00 2001
From: Jovibor 
Date: Sun, 11 Aug 2019 20:36:53 +1000
Subject: [PATCH 066/156] Fixed typos

---
 translations/README-ru.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/translations/README-ru.md b/translations/README-ru.md
index 8e7ccdea..8f3ad116 100644
--- a/translations/README-ru.md
+++ b/translations/README-ru.md
@@ -170,7 +170,7 @@
 
 ## 2.3 Повторения
 
-Символы `+`, `*` или `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон.
+Символы `+`, `*` или `?` используются для обозначения того сколько раз появляется какой-либо подшаблон.
 Данные метасимволы могут вести себя по-разному, в зависимости от ситуации.
 
 ### 2.3.1 Звёздочка
@@ -289,7 +289,7 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1)
 
-Не запоминающиеся группы пригодиться, когда они используются в функциях поиска и замены
+Незапоминающиеся группы могут пригодиться, когда они используются в функциях поиска и замены,
 или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных,
 смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
 
@@ -392,8 +392,8 @@
 
 Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид
 ***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив).
-Данные проверки используются, мы знаем, что шаблон предшествует или сопровождается другим шаблоном.
-Например, мы хотим получить получить цену в долларах `$`, из следующей входной строки
+Данные проверки используются когда мы знаем, что шаблон предшествует или сопровождается другим шаблоном.
+Например, мы хотим получить цену в долларах `$` из следующей входной строки
 `$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
 получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют
 следующие виды проверок:

From 816b7384cfcc0e2b3c02001e638f6c7be1206324 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Frank=20B=C3=BCltge?= 
Date: Thu, 29 Aug 2019 12:13:54 +0200
Subject: [PATCH 067/156] Start of Translation in German language.

---
 translations/README-de.md | 593 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 593 insertions(+)
 create mode 100644 translations/README-de.md

diff --git a/translations/README-de.md b/translations/README-de.md
new file mode 100644
index 00000000..f4e7e145
--- /dev/null
+++ b/translations/README-de.md
@@ -0,0 +1,593 @@
+

+
+ + Learn Regex + +

+ +## Translations: + +* [English](../README.md) +* [German](../translations/Readme-de.md) +* [Español](../translations/README-es.md) +* [Français](../translations/README-fr.md) +* [Português do Brasil](../translations/README-pt_BR.md) +* [中文版](../translations/README-cn.md) +* [日本語](../translations/README-ja.md) +* [한국어](../translations/README-ko.md) +* [Turkish](../translations/README-tr.md) +* [Greek](../translations/README-gr.md) +* [Magyar](../translations/README-hu.md) +* [Polish](../translations/README-pl.md) +* [Русский](../translations/README-ru.md) +* [Tiếng Việt](../translations/README-vn.md) + +## Was sind reguläre Ausdrücke + +> Ein regulärer Ausdruck ist eine Gruppe von Buchstaben und Symbolen, die benutzt werden um ein spezifisches Muster in einem Text zu finden +Ein regulärer Ausdruch ist ein Muster, das mit einem zu durchsuchenden Text von links nach rechts abgeglichen wird. Die Bezeichnung +"Regulärer Ausdruck" ist in der Praxis unüblich und stattdessen wird häufig die Englische Abkürzung "Regex" verwendet. Reguläre +Ausdrücke werden verwendet um Fragemente eines Textes zu ersetzen, Formulare zu validieren, Segmente eines Textes anhand eines +Musters zu extrahieren und für vieles mehr. + +Angenommen Du schreibst eine Applikation und möchtest die Regeln definieren, nach denen ein Benutzer seinen Benutzernamen auswählen +kann. Wir möchten festlegen, dass der Benutzernamen Buchstaben, Ziffern, Unter- und Bindestriche beinhalten darf. Außerdem wollen +wir die Anzahl der Zeichen limitieren, damit der Name nicht unlesbar wird. Dazu verwenden wir den folgenden regulären Ausdruck um +den Benutzernamen zu überprüfen: +

+

+ Regular expression +

+ +Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Der Eingabe `Jo` wird +nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. + +## Table of Contents + +- [Basis Vergleiche](#1-basic-matchers) +- [Sonderzeichen](#2-meta-characters) + - [Punkt](#21-full-stop) + - [Character set](#22-character-set) + - [Invertierter Zeichensatz](#221-negated-character-set) + - [Wiederholungen](#23-repetitions) + - [Stern *](#231-the-star) + - [Plus +](#232-the-plus) + - [Fragezeichen ?](#233-the-question-mark) + - [Klammern](#24-braces) + - [Zeichengruppen](#25-character-group) + - [Alternation](#26-alternation) + - [Auswertung von Sonderzeichen](#27-escaping-special-character) + - [Anker](#28-anchors) + - [Caret ^](#281-caret) + - [Dollar $](#282-dollar) +- [Kurzschreibweisen](#3-shorthand-character-sets) +- [Umschauen](#4-lookaround) + - [Positives Vorrausschauen](#41-positive-lookahead) + - [Negatives Vorrausschauen](#42-negative-lookahead) + - [Positives Zurückschauen](#43-positive-lookbehind) + - [Negatives Zurückschauen](#44-negative-lookbehind) +- [Steuerparameter](#5-flags) + - [Groß-/kleinschreibung](#51-case-insensitive) + - [Globale Suche](#52-global-search) + - [Mehrzeilig](#53-multiline) +- [Gierige oder faule Übereinstimmung](#6-greedy-vs-lazy-matching) + +## 1. Basis Vergleiche + +A regular expression is just a pattern of characters that we use to perform +search in a text. For example, the regular expression `the` means: the letter +`t`, followed by the letter `h`, followed by the letter `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dmRygT/1) + +The regular expression `123` matches the string `123`. The regular expression is +matched against an input string by comparing each character in the regular +expression to each character in the input string, one after another. Regular +expressions are normally case-sensitive so the regular expression `The` would +not match the string `the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/1paXsy/1) + +## 2. Meta Characters + +Meta characters are the building blocks of the regular expressions. Meta +characters do not stand for themselves but instead are interpreted in some +special way. Some meta characters have a special meaning and are written inside +square brackets. The meta characters are as follows: + +|Meta character|Description| +|:----:|----| +|.|Period matches any single character except a line break.| +|[ ]|Character class. Matches any character contained between the square brackets.| +|[^ ]|Negated character class. Matches any character that is not contained between the square brackets| +|*|Matches 0 or more repetitions of the preceding symbol.| +|+|Matches 1 or more repetitions of the preceding symbol.| +|?|Makes the preceding symbol optional.| +|{n,m}|Braces. Matches at least "n" but not more than "m" repetitions of the preceding symbol.| +|(xyz)|Character group. Matches the characters xyz in that exact order.| +|||Alternation. Matches either the characters before or the characters after the symbol.| +|\|Escapes the next character. This allows you to match reserved characters [ ] ( ) { } . * + ? ^ $ \ || +|^|Matches the beginning of the input.| +|$|Matches the end of the input.| + +## 2.1 Full stop + +Full stop `.` is the simplest example of meta character. The meta character `.` +matches any single character. It will not match return or newline characters. +For example, the regular expression `.ar` means: any character, followed by the +letter `a`, followed by the letter `r`. + +
+".ar" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/xc9GkU/1) + +## 2.2 Character set + +Character sets are also called character class. Square brackets are used to +specify character sets. Use a hyphen inside a character set to specify the +characters' range. The order of the character range inside square brackets +doesn't matter. For example, the regular expression `[Tt]he` means: an uppercase +`T` or lowercase `t`, followed by the letter `h`, followed by the letter `e`. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/2ITLQ4/1) + +A period inside a character set, however, means a literal period. The regular +expression `ar[.]` means: a lowercase character `a`, followed by letter `r`, +followed by a period `.` character. + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Test the regular expression](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Negated character set + +In general, the caret symbol represents the start of the string, but when it is +typed after the opening square bracket it negates the character set. For +example, the regular expression `[^c]ar` means: any character except `c`, +followed by the character `a`, followed by the letter `r`. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/nNNlq3/1) + +## 2.3 Repetitions + +Following meta characters `+`, `*` or `?` are used to specify how many times a +subpattern can occur. These meta characters act differently in different +situations. + +### 2.3.1 The Star + +The symbol `*` matches zero or more repetitions of the preceding matcher. The +regular expression `a*` means: zero or more repetitions of preceding lowercase +character `a`. But if it appears after a character set or class then it finds +the repetitions of the whole character set. For example, the regular expression +`[a-z]*` means: any number of lowercase letters in a row. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Test the regular expression](https://regex101.com/r/7m8me5/1) + +The `*` symbol can be used with the meta character `.` to match any string of +characters `.*`. The `*` symbol can be used with the whitespace character `\s` +to match a string of whitespace characters. For example, the expression +`\s*cat\s*` means: zero or more spaces, followed by lowercase character `c`, +followed by lowercase character `a`, followed by lowercase character `t`, +followed by zero or more spaces. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Test the regular expression](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 The Plus + +The symbol `+` matches one or more repetitions of the preceding character. For +example, the regular expression `c.+t` means: lowercase letter `c`, followed by +at least one character, followed by the lowercase character `t`. It needs to be +clarified that `t` is the last `t` in the sentence. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 The Question Mark + +In regular expression the meta character `?` makes the preceding character +optional. This symbol matches zero or one instance of the preceding character. +For example, the regular expression `[T]?he` means: Optional the uppercase +letter `T`, followed by the lowercase character `h`, followed by the lowercase +character `e`. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/kPpO2x/1) + +## 2.4 Braces + +In regular expression braces that are also called quantifiers are used to +specify the number of times that a character or a group of characters can be +repeated. For example, the regular expression `[0-9]{2,3}` means: Match at least +2 digits but not more than 3 ( characters in the range of 0 to 9). + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/juM86s/1) + +We can leave out the second number. For example, the regular expression +`[0-9]{2,}` means: Match 2 or more digits. If we also remove the comma the +regular expression `[0-9]{3}` means: Match exactly 3 digits. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Sivu30/1) + +## 2.5 Capturing Group + +A capturing group is a group of sub-patterns that is written inside Parentheses +`(...)`. Like as we discussed before that in regular expression if we put a quantifier +after a character then it will repeat the preceding character. But if we put quantifier +after a capturing group then it repeats the whole capturing group. For example, +the regular expression `(ab)*` matches zero or more repetitions of the character +"ab". We can also use the alternation `|` meta character inside capturing group. +For example, the regular expression `(c|g|p)ar` means: lowercase character `c`, +`g` or `p`, followed by character `a`, followed by character `r`. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/tUxrBG/1) + +Note that capturing groups do not only match but also capture the characters for use in +the parent language. The parent language could be python or javascript or virtually any +language that implements regular expressions in a function definition. + +### 2.5.1 Non-capturing group + +A non-capturing group is a capturing group that only matches the characters, but +does not capture the group. A non-capturing group is denoted by a `?` followed by a `:` +within parenthesis `(...)`. For example, the regular expression `(?:c|g|p)ar` is similar to +`(c|g|p)ar` in that it matches the same characters but will not create a capture group. + +
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/Rm7Me8/1) + +Non-capturing groups can come in handy when used in find-and-replace functionality or +when mixed with capturing groups to keep the overview when producing any other kind of output. +See also [4. Lookaround](#4-lookaround). + +## 2.6 Alternation + +In a regular expression, the vertical bar `|` is used to define alternation. +Alternation is like an OR statement between multiple expressions. Now, you may be +thinking that character set and alternation works the same way. But the big +difference between character set and alternation is that character set works on +character level but alternation works on expression level. For example, the +regular expression `(T|t)he|car` means: either (uppercase character `T` or lowercase +`t`, followed by lowercase character `h`, followed by lowercase character `e`) OR +(lowercase character `c`, followed by lowercase character `a`, followed by +lowercase character `r`). Note that I put the parentheses for clarity, to show that either expression +in parentheses can be met and it will match. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/fBXyX0/1) + +## 2.7 Escaping special character + +Backslash `\` is used in regular expression to escape the next character. This +allows us to specify a symbol as a matching character including reserved +characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching +character prepend `\` before it. + +For example, the regular expression `.` is used to match any character except +newline. Now to match `.` in an input string the regular expression +`(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase +character `a`, followed by lowercase letter `t`, followed by optional `.` +character. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/DOc5Nu/1) + +## 2.8 Anchors + +In regular expressions, we use anchors to check if the matching symbol is the +starting symbol or ending symbol of the input string. Anchors are of two types: +First type is Caret `^` that check if the matching character is the start +character of the input and the second type is Dollar `$` that checks if matching +character is the last character of the input string. + +### 2.8.1 Caret + +Caret `^` symbol is used to check if matching character is the first character +of the input string. If we apply the following regular expression `^a` (if a is +the starting symbol) to input string `abc` it matches `a`. But if we apply +regular expression `^b` on above input string it does not match anything. +Because in input string `abc` "b" is not the starting symbol. Let's take a look +at another regular expression `^(T|t)he` which means: uppercase character `T` or +lowercase character `t` is the start symbol of the input string, followed by +lowercase character `h`, followed by lowercase character `e`. + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Dollar + +Dollar `$` symbol is used to check if matching character is the last character +of the input string. For example, regular expression `(at\.)$` means: a +lowercase character `a`, followed by lowercase character `t`, followed by a `.` +character and the matcher must be end of the string. + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/t0AkOd/1) + +## 3. Shorthand Character Sets + +Regular expression provides shorthands for the commonly used character sets, +which offer convenient shorthands for commonly used regular expressions. The +shorthand character sets are as follows: + +|Shorthand|Description| +|:----:|----| +|.|Any character except new line| +|\w|Matches alphanumeric characters: `[a-zA-Z0-9_]`| +|\W|Matches non-alphanumeric characters: `[^\w]`| +|\d|Matches digit: `[0-9]`| +|\D|Matches non-digit: `[^\d]`| +|\s|Matches whitespace character: `[\t\n\f\r\p{Z}]`| +|\S|Matches non-whitespace character: `[^\s]`| + +## 4. Lookaround + +Lookbehind and lookahead (also called lookaround) are specific types of +***non-capturing groups*** (Used to match the pattern but not included in matching +list). Lookarounds are used when we have the condition that this pattern is +preceded or followed by another certain pattern. For example, we want to get all +numbers that are preceded by `$` character from the following input string +`$4.44 and $10.88`. We will use following regular expression `(?<=\$)[0-9\.]*` +which means: get all the numbers which contain `.` character and are preceded +by `$` character. Following are the lookarounds that are used in regular +expressions: + +|Symbol|Description| +|:----:|----| +|?=|Positive Lookahead| +|?!|Negative Lookahead| +|?<=|Positive Lookbehind| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. +
+ +[Test the regular expression](https://regex101.com/r/IDDARt/1) + +### 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 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 +from input string that are not followed by the word `fat` precedes by a space +character. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/V32Npg/1) + +### 4.3 Positive Lookbehind + +Positive lookbehind is used to get all the matches that are preceded by a +specific pattern. Positive lookbehind is denoted by `(?<=...)`. For example, the +regular expression `(?<=(T|t)he\s)(fat|mat)` means: get all `fat` or `mat` words +from input string that are after the word `The` or `the`. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/avH165/1) + +### 4.4 Negative Lookbehind + +Negative lookbehind is used to get all the matches that are not preceded by a +specific pattern. Negative lookbehind is denoted by `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. +
+ +[Test the regular expression](https://regex101.com/r/8Efx5G/1) + +## 5. Flags + +Flags are also called modifiers because they modify the output of a regular +expression. These flags can be used in any order or combination, and are an +integral part of the RegExp. + +|Flag|Description| +|:----:|----| +|i|Case insensitive: Sets matching to be case-insensitive.| +|g|Global Search: Search for a pattern throughout the input string.| +|m|Multiline: Anchor meta character works on each line.| + +### 5.1 Case Insensitive + +The `i` modifier is used to perform case-insensitive matching. For example, the +regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase +character `h`, followed by character `e`. And at the end of regular expression +the `i` flag tells the regular expression engine to ignore the case. As you can +see we also provided `g` flag because we want to search for the pattern in the +whole input string. + +
+"The" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/ahfiuh/1) + +### 5.2 Global search + +The `g` modifier is used to perform a global match (find all matches rather than +stopping after the first match). For example, the regular expression`/.(at)/g` +means: any character except new line, followed by lowercase character `a`, +followed by lowercase character `t`. Because we provided `g` flag at the end of +the regular expression now it will find all matches in the input string, not just the first one (which is the default behavior). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dO1nef/1) + +### 5.3 Multiline + +The `m` modifier is used to perform a multi-line match. As we discussed earlier +anchors `(^, $)` are used to check if pattern is the beginning of the input or +end of the input string. But if we want that anchors works on each line we use +`m` flag. For example, the regular expression `/at(.)?$/gm` means: lowercase +character `a`, followed by lowercase character `t`, optionally anything except +new line. And because of `m` flag now regular expression engine matches pattern +at the end of each line in a string. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/E88WE2/1) + +## 6. Greedy vs lazy matching +By default regex will do greedy matching , means it will match as long as +possible. we can use `?` to match in lazy way means as short as possible + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Test the regular expression](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[Test the regular expression](https://regex101.com/r/AyAdgJ/2) + + +## Contribution + +* Open pull request with improvements +* Discuss ideas in issues +* Spread the word +* Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## License + +MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) From e3a1744640c2eef8c4e3d3606c33f6a883366eb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20B=C3=BCltge?= Date: Thu, 29 Aug 2019 12:21:24 +0200 Subject: [PATCH 068/156] Update path to self file and image --- translations/README-de.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index f4e7e145..b503af40 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -8,7 +8,7 @@ ## Translations: * [English](../README.md) -* [German](../translations/Readme-de.md) +* [German](Readme-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -36,7 +36,7 @@ wir die Anzahl der Zeichen limitieren, damit der Name nicht unlesbar wird. Dazu den Benutzernamen zu überprüfen:

- Regular expression + Regular expression

Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Der Eingabe `Jo` wird From b0f6cf611b805fed710edc270d126cec7e7d098e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20B=C3=BCltge?= Date: Thu, 29 Aug 2019 12:22:19 +0200 Subject: [PATCH 069/156] Remove Link we are on the file --- translations/README-de.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-de.md b/translations/README-de.md index b503af40..22463f61 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -8,7 +8,7 @@ ## Translations: * [English](../README.md) -* [German](Readme-de.md) +* German * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) From 21cf6aefe58165b14079ccedaf8714af6b02b6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20B=C3=BCltge?= Date: Thu, 29 Aug 2019 12:23:14 +0200 Subject: [PATCH 070/156] Add link to German translation. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3a5c0557..63c8a7ed 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ ## Translations: * [English](README.md) +* [German](translations/README-de.md) * [Español](translations/README-es.md) * [Français](translations/README-fr.md) * [Português do Brasil](translations/README-pt_BR.md) From 81660715a4cb5ffb2a1de8b953b800f735d877e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20B=C3=BCltge?= Date: Thu, 29 Aug 2019 15:01:28 +0200 Subject: [PATCH 071/156] Add more translations --- translations/README-de.md | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 22463f61..ff2ebd4a 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -39,8 +39,7 @@ den Benutzernamen zu überprüfen: Regular expression

-Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Der Eingabe `Jo` wird -nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. +Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Der Eingabe `Jo` wird nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. ## Table of Contents @@ -53,9 +52,9 @@ nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. - [Stern *](#231-the-star) - [Plus +](#232-the-plus) - [Fragezeichen ?](#233-the-question-mark) - - [Klammern](#24-braces) + - [Klammern {}](#24-braces) - [Zeichengruppen](#25-character-group) - - [Alternation](#26-alternation) + - [Alternation |](#26-alternation) - [Auswertung von Sonderzeichen](#27-escaping-special-character) - [Anker](#28-anchors) - [Caret ^](#281-caret) @@ -67,43 +66,34 @@ nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. - [Positives Zurückschauen](#43-positive-lookbehind) - [Negatives Zurückschauen](#44-negative-lookbehind) - [Steuerparameter](#5-flags) - - [Groß-/kleinschreibung](#51-case-insensitive) + - [Groß-/Kleinschreibung](#51-case-insensitive) - [Globale Suche](#52-global-search) - [Mehrzeilig](#53-multiline) - [Gierige oder faule Übereinstimmung](#6-greedy-vs-lazy-matching) ## 1. Basis Vergleiche -A regular expression is just a pattern of characters that we use to perform -search in a text. For example, the regular expression `the` means: the letter -`t`, followed by the letter `h`, followed by the letter `e`. +Ein regulärer Ausdruck ist ein einfaches Muster von Zeichen, welches für eine Suche in Text genutzt wird. Zum Beispiel, der reguläre Ausdruck `the` meint: der Buchstabe `t`, gefolgt durch den Buchstaben `h`, gefolgt durch den Buchstaben `e`.
 "the" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/dmRygT/1) +[Teste den regulären Ausdruck](https://regex101.com/r/dmRygT/1) -The regular expression `123` matches the string `123`. The regular expression is -matched against an input string by comparing each character in the regular -expression to each character in the input string, one after another. Regular -expressions are normally case-sensitive so the regular expression `The` would -not match the string `the`. +Der reguläre Ausdruck `123` entspricht der Zeichenkette `123`. Dieser reguläre Ausdruck kann mit einer Zeichenkette verglichen werden, in dem jedes Zeichen in dem regulären Ausdruck nacheinander verglichen wird. Reguläre Ausdrücke sind normalerweise case sensitiv, Beachtung von Groß-/Kleinschreibung, so dass der Ausdruck `The` nicht mit der Zeichenkette `the` überein stimmen würde.
 "The" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/1paXsy/1) +[Teste den regulären Ausdruck](https://regex101.com/r/1paXsy/1) -## 2. Meta Characters +## 2. Sonderzeichen -Meta characters are the building blocks of the regular expressions. Meta -characters do not stand for themselves but instead are interpreted in some -special way. Some meta characters have a special meaning and are written inside -square brackets. The meta characters are as follows: +Sonderzeichen sind Bausteine von regulären Ausdrücken. Sonderzeichen stehen nicht für sich selbst, sondern werden in speziellen Fällen interpretiert. Einige Sonderzeichen haben eine besondere Bedeutung und sind innerhalb eckiger Klammern `[]`. Folgende Sonderzeichen sind möglich: -|Meta character|Description| +|Sonderzeichen|Beschreibung| |:----:|----| |.|Period matches any single character except a line break.| |[ ]|Character class. Matches any character contained between the square brackets.| From 807c7071aaee4cb4ed084b9afd5cb5ba7b1c0717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E4=B9=9D=E9=BC=8E?= <109224573@qq.com> Date: Mon, 7 Oct 2019 11:17:00 +0800 Subject: [PATCH 072/156] Update zh-CN --- translations/README-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 6cce5dee..c885630c 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -179,7 +179,7 @@ ### 2.3.1 `*` 号 `*`号匹配 在`*`之前的字符出现`大于等于0`次. -例如, 表达式 `a*` 匹配以0或更多个a开头的字符, 因为有0个这个条件, 其实也就匹配了所有的字符. 表达式`[a-z]*` 匹配一个行中所有以小写字母开头的字符串. +例如, 表达式 `a*` 匹配0或更多个以a开头的字符. 表达式`[a-z]*` 匹配一个行中所有以小写字母开头的字符串.
 "[a-z]*" => The car parked in the garage #21.
@@ -199,7 +199,7 @@
 ### 2.3.2 `+` 号
 
 `+`号匹配`+`号之前的字符出现 >=1 次.
-例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着任意个字符的字符串.
+例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着至少一个字符的字符串.
 
 
 "c.+t" => The fat cat sat on the mat.

From 73403e6fdfa9748ddfae845372ee78fa2f051afc Mon Sep 17 00:00:00 2001
From: Caleb Mazalevskis 
Date: Sun, 13 Oct 2019 21:04:51 +0800
Subject: [PATCH 073/156] Fix typo.

(See: https://www.diccionariodedudas.com/remplazar-o-reemplazar/)
---
 translations/README-es.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-es.md b/translations/README-es.md
index dbb8f29a..da6d3e15 100644
--- a/translations/README-es.md
+++ b/translations/README-es.md
@@ -34,7 +34,7 @@
 ## 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 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.
+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 reemplazar 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 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.
 

From 65c7e3ee7e81c20c804955723c343c0218cb3575 Mon Sep 17 00:00:00 2001
From: Roberto Ruccia 
Date: Tue, 8 Oct 2019 15:52:51 +0200
Subject: [PATCH 074/156] Fix typos

---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 3a5c0557..23a2b86e 100644
--- a/README.md
+++ b/README.md
@@ -252,7 +252,7 @@ character `e`.
 In regular expression braces that are also called quantifiers are used to
 specify the number of times that a character or a group of characters can be
 repeated. For example, the regular expression `[0-9]{2,3}` means: Match at least
-2 digits but not more than 3 ( characters in the range of 0 to 9).
+2 digits but not more than 3 (characters in the range of 0 to 9).
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -421,7 +421,7 @@ shorthand character sets are as follows:
 ## 4. Lookaround
 
 Lookbehind and lookahead (also called lookaround) are specific types of
-***non-capturing groups*** (Used to match the pattern but not included in matching
+***non-capturing groups*** (used to match the pattern but not included in matching
 list). Lookarounds are used when we have the condition that this pattern is
 preceded or followed by another certain pattern. For example, we want to get all
 numbers that are preceded by `$` character from the following input string
@@ -578,8 +578,8 @@ at the end of each line in a string.
 [Test the regular expression](https://regex101.com/r/E88WE2/1)
 
 ## 6. Greedy vs lazy matching
-By default regex will do greedy matching , means it will match as long as
-possible. we can use `?` to match in lazy way means as short as possible
+By default regex will do greedy matching which means it will match as long as
+possible. We can use `?` to match in lazy way which means as short as possible.
 
 
 "/(.*at)/" => The fat cat sat on the mat. 
From 5e624ad0fe3dde51e9350da814e4d779575bbd2a Mon Sep 17 00:00:00 2001 From: chenyuheng Date: Fri, 18 Oct 2019 00:41:44 +0800 Subject: [PATCH 075/156] update the Chinese text punctuations to fullwidth marks reference: https://en.wikipedia.org/wiki/Chinese_punctuation#Marks_similar_to_European_punctuation --- translations/README-cn.md | 217 +++++++++++++++++++------------------- 1 file changed, 108 insertions(+), 109 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index c885630c..06c2a367 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -15,7 +15,7 @@

-## 翻译: +## 翻译: * [English](../README.md) * [Español](../translations/README-es.md) @@ -31,25 +31,25 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -## 什么是正则表达式? +## 什么是正则表达式? -> 正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子. +> 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。 +一个正则表达式是在一个主体字符串中从左到右匹配字符串时的一种样式。 +“Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。 +正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。 -一个正则表达式是在一个主体字符串中从左到右匹配字符串时的一种样式. -"Regular expression"这个词比较拗口, 我们常使用缩写的术语"regex"或"regexp". -正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等. - -想象你正在写一个应用, 然后你想设定一个用户命名的规则, 让用户名包含字符,数字,下划线和连字符,以及限制字符的个数,好让名字看起来没那么丑. -我们使用以下正则表达式来验证一个用户名: +想象你正在写一个应用,然后你想设定一个用户命名的规则,让用户名包含字符、数字、下划线和连字符,以及限制字符的个数,好让名字看起来没那么丑。 +我们使用以下正则表达式来验证一个用户名:

+

Regular expression

-以上的正则表达式可以接受 `john_doe`, `jo-hn_doe`, `john12_as`. -但不匹配`Jo`, 因为它包含了大写的字母而且太短了. +以上的正则表达式可以接受 `john_doe`、`jo-hn_doe`、`john12_as`。 +但不匹配`Jo`,因为它包含了大写的字母而且太短了。 目录 ================= @@ -77,17 +77,17 @@ * [4.3 ?<= ... 正后发断言](#43---正后发断言) * [4.4 ?<!... 负后发断言](#44--负后发断言) * [5. 标志](#5-标志) - * [5.1 忽略大小写 (Case Insensitive)](#51-忽略大小写-case-insensitive) - * [5.2 全局搜索 (Global search)](#52-全局搜索-global-search) - * [5.3 多行修饰符 (Multiline)](#53-多行修饰符-multiline) + * [5.1 忽略大小写(Case Insensitive)](#51-忽略大小写-case-insensitive) + * [5.2 全局搜索(Global search)](#52-全局搜索-global-search) + * [5.3 多行修饰符(Multiline)](#53-多行修饰符-multiline) * [额外补充](#额外补充) * [贡献](#贡献) * [许可证](#许可证) ## 1. 基本匹配 -正则表达式其实就是在执行搜索时的格式, 它由一些字母和数字组合而成. -例如: 一个正则表达式 `the`, 它表示一个规则: 由字母`t`开始,接着是`h`,再接着是`e`. +正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成。 +例如:一个正则表达式 `the`,它表示一个规则:由字母`t`开始,接着是`h`,再接着是`e`。
 "the" => The fat cat sat on the mat.
@@ -95,9 +95,9 @@
 
 [在线练习](https://regex101.com/r/dmRygT/1)
 
-正则表达式`123`匹配字符串`123`. 它逐个字符的与输入的正则表达式做比较.
+正则表达式`123`匹配字符串`123`。它逐个字符的与输入的正则表达式做比较。
 
-正则表达式是大小写敏感的, 所以`The`不会匹配`the`.
+正则表达式是大小写敏感的,所以`The`不会匹配`the`。
 
 
 "The" => The fat cat sat on the mat.
@@ -107,29 +107,29 @@
 
 ## 2. 元字符
 
-正则表达式主要依赖于元字符.
-元字符不代表他们本身的字面意思, 他们都有特殊的含义. 一些元字符写在方括号中的时候有一些特殊的意思. 以下是一些元字符的介绍:
+正则表达式主要依赖于元字符。
+元字符不代表他们本身的字面意思,他们都有特殊的含义。一些元字符写在方括号中的时候有一些特殊的意思。以下是一些元字符的介绍:
 
 |元字符|描述|
 |:----:|----|
-|.|句号匹配任意单个字符除了换行符.|
-|[ ]|字符种类. 匹配方括号内的任意字符.|
-|[^ ]|否定的字符种类. 匹配除了方括号里的任意字符|
-|*|匹配>=0个重复的在*号之前的字符.|
-|+|匹配>=1个重复的+号前的字符.
+|.|句号匹配任意单个字符除了换行符。|
+|[ ]|字符种类。匹配方括号内的任意字符。|
+|[^ ]|否定的字符种类。匹配除了方括号里的任意字符|
+|*|匹配>=0个重复的在*号之前的字符。|
+|+|匹配>=1个重复的+号前的字符。
 |?|标记?之前的字符为可选.|
 |{n,m}|匹配num个大括号之前的字符 (n <= num <= m).|
-|(xyz)|字符集, 匹配与 xyz 完全相等的字符串.|
-|||或运算符,匹配符号前或后的字符.|
+|(xyz)|字符集,匹配与 xyz 完全相等的字符串.|
+|||或运算符,匹配符号前或后的字符.|
 |\|转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ ||
 |^|从开始行开始匹配.|
 |$|从末端开始匹配.|
 
 ## 2.1 点运算符 `.`
 
-`.`是元字符中最简单的例子.
-`.`匹配任意单个字符, 但不匹配换行符.
-例如, 表达式`.ar`匹配一个任意字符后面跟着是`a`和`r`的字符串.
+`.`是元字符中最简单的例子。
+`.`匹配任意单个字符,但不匹配换行符。
+例如,表达式`.ar`匹配一个任意字符后面跟着是`a`和`r`的字符串。
 
 
 ".ar" => The car parked in the garage.
@@ -139,11 +139,11 @@
 
 ## 2.2 字符集
 
-字符集也叫做字符类.
-方括号用来指定一个字符集.
-在方括号中使用连字符来指定字符集的范围.
-在方括号中的字符集不关心顺序.
-例如, 表达式`[Tt]he` 匹配 `the` 和 `The`.
+字符集也叫做字符类。
+方括号用来指定一个字符集。
+在方括号中使用连字符来指定字符集的范围。
+在方括号中的字符集不关心顺序。
+例如,表达式`[Tt]he` 匹配 `the` 和 `The`。
 
 
 "[Tt]he" => The car parked in the garage.
@@ -151,7 +151,7 @@
 
 [在线练习](https://regex101.com/r/2ITLQ4/1)
 
-方括号的句号就表示句号.
+方括号的句号就表示句号。
 表达式 `ar[.]` 匹配 `ar.`字符串
 
 
@@ -162,8 +162,8 @@
 
 ### 2.2.1 否定字符集
 
-一般来说 `^` 表示一个字符串的开头, 但它用在一个方括号的开头的时候, 它表示这个字符集是否定的.
-例如, 表达式`[^c]ar` 匹配一个后面跟着`ar`的除了`c`的任意字符.
+一般来说 `^` 表示一个字符串的开头,但它用在一个方括号的开头的时候,它表示这个字符集是否定的。
+例如,表达式`[^c]ar` 匹配一个后面跟着`ar`的除了`c`的任意字符。
 
 
 "[^c]ar" => The car parked in the garage.
@@ -173,13 +173,13 @@
 
 ## 2.3 重复次数
 
-后面跟着元字符 `+`, `*` or `?` 的, 用来指定匹配子模式的次数.
-这些元字符在不同的情况下有着不同的意思.
+后面跟着元字符 `+`,`*` or `?` 的,用来指定匹配子模式的次数。
+这些元字符在不同的情况下有着不同的意思。
 
 ### 2.3.1 `*` 号
 
-`*`号匹配 在`*`之前的字符出现`大于等于0`次.
-例如, 表达式 `a*` 匹配0或更多个以a开头的字符. 表达式`[a-z]*` 匹配一个行中所有以小写字母开头的字符串.
+`*`号匹配 在`*`之前的字符出现`大于等于0`次。
+例如,表达式 `a*` 匹配0或更多个以a开头的字符。表达式`[a-z]*` 匹配一个行中所有以小写字母开头的字符串。
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -187,8 +187,8 @@
 
 [在线练习](https://regex101.com/r/7m8me5/1)
 
-`*`字符和`.`字符搭配可以匹配所有的字符`.*`.
-`*`和表示匹配空格的符号`\s`连起来用, 如表达式`\s*cat\s*`匹配0或更多个空格开头和0或更多个空格结尾的cat字符串.
+`*`字符和`.`字符搭配可以匹配所有的字符`.*`。
+`*`和表示匹配空格的符号`\s`连起来用,如表达式`\s*cat\s*`匹配0或更多个空格开头和0或更多个空格结尾的cat字符串。
 
 
 "\s*cat\s*" => The fat cat sat on the concatenation.
@@ -198,8 +198,8 @@
 
 ### 2.3.2 `+` 号
 
-`+`号匹配`+`号之前的字符出现 >=1 次.
-例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着至少一个字符的字符串.
+`+`号匹配`+`号之前的字符出现 >=1 次。
+例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着至少一个字符的字符串。
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -209,8 +209,8 @@
 
 ### 2.3.3 `?` 号
 
-在正则表达式中元字符 `?` 标记在符号前面的字符为可选, 即出现 0 或 1 次.
-例如, 表达式 `[T]?he` 匹配字符串 `he` 和 `The`.
+在正则表达式中元字符 `?` 标记在符号前面的字符为可选,即出现 0 或 1 次。
+例如,表达式 `[T]?he` 匹配字符串 `he` 和 `The`。
 
 
 "[T]he" => The car is parked in the garage.
@@ -226,8 +226,8 @@
 
 ## 2.4 `{}` 号
 
-在正则表达式中 `{}` 是一个量词, 常用来一个或一组字符可以重复出现的次数.
-例如,  表达式 `[0-9]{2,3}` 匹配最少 2 位最多 3 位 0~9 的数字.
+在正则表达式中 `{}` 是一个量词,常用来一个或一组字符可以重复出现的次数。
+例如, 表达式 `[0-9]{2,3}` 匹配最少 2 位最多 3 位 0~9 的数字。
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -235,8 +235,8 @@
 
 [在线练习](https://regex101.com/r/juM86s/1)
 
-我们可以省略第二个参数.
-例如, `[0-9]{2,}` 匹配至少两位 0~9 的数字.
+我们可以省略第二个参数。
+例如,`[0-9]{2,}` 匹配至少两位 0~9 的数字。
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -244,8 +244,8 @@
 
 [在线练习](https://regex101.com/r/Gdy4w5/1)
 
-如果逗号也省略掉则表示重复固定的次数.
-例如, `[0-9]{3}` 匹配3位数字
+如果逗号也省略掉则表示重复固定的次数。
+例如,`[0-9]{3}` 匹配3位数字
 
 
 "[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -255,9 +255,9 @@
 
 ## 2.5 `(...)` 特征标群
 
-特征标群是一组写在 `(...)` 中的子模式. 例如之前说的 `{}` 是用来表示前面一个字符出现指定次数. 但如果在 `{}` 前加入特征标群则表示整个标群内的字符重复 N 次. 例如, 表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`.
+特征标群是一组写在 `(...)` 中的子模式。例如之前说的 `{}` 是用来表示前面一个字符出现指定次数。但如果在 `{}` 前加入特征标群则表示整个标群内的字符重复 N 次。例如,表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`。
 
-我们还可以在 `()` 中用或字符 `|` 表示或. 例如, `(c|g|p)ar` 匹配 `car` 或 `gar` 或 `par`.
+我们还可以在 `()` 中用或字符 `|` 表示或。例如,`(c|g|p)ar` 匹配 `car` 或 `gar` 或 `par`.
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -267,9 +267,9 @@
 
 ## 2.6 `|` 或运算符
 
-或运算符就表示或, 用作判断条件.
+或运算符就表示或,用作判断条件。
 
-例如 `(T|t)he|car` 匹配 `(T|t)he` 或 `car`.
+例如 `(T|t)he|car` 匹配 `(T|t)he` 或 `car`。
 
 
 "(T|t)he|car" => The car is parked in the garage.
@@ -279,9 +279,9 @@
 
 ## 2.7 转码特殊字符
 
-反斜线 `\` 在表达式中用于转码紧跟其后的字符. 用于指定 `{ } [ ] / \ + * . $ ^ | ?` 这些特殊字符. 如果想要匹配这些特殊字符则要在其前面加上反斜线 `\`.
+反斜线 `\` 在表达式中用于转码紧跟其后的字符。用于指定 `{ } [ ] / \ + * . $ ^ | ?` 这些特殊字符。如果想要匹配这些特殊字符则要在其前面加上反斜线 `\`。
 
-例如 `.` 是用来匹配除换行符外的所有字符的. 如果想要匹配句子中的 `.` 则要写成 `\.` 以下这个例子 `\.?`是选择性匹配`.`
+例如 `.` 是用来匹配除换行符外的所有字符的。如果想要匹配句子中的 `.` 则要写成 `\.` 以下这个例子 `\.?`是选择性匹配`.`
 
 
 "(f|c|m)at\.?" => The fat cat sat on the mat.
@@ -291,15 +291,15 @@
 
 ## 2.8 锚点
 
-在正则表达式中, 想要匹配指定开头或结尾的字符串就要使用到锚点. `^` 指定开头, `$` 指定结尾.
+在正则表达式中,想要匹配指定开头或结尾的字符串就要使用到锚点。`^` 指定开头,`$` 指定结尾。
 
 ### 2.8.1 `^` 号
 
-`^` 用来检查匹配的字符串是否在所匹配字符串的开头.
+`^` 用来检查匹配的字符串是否在所匹配字符串的开头。
 
-例如, 在 `abc` 中使用表达式 `^a` 会得到结果 `a`. 但如果使用 `^b` 将匹配不到任何结果. 因为在字符串 `abc` 中并不是以 `b` 开头.
+例如,在 `abc` 中使用表达式 `^a` 会得到结果 `a`。但如果使用 `^b` 将匹配不到任何结果。因为在字符串 `abc` 中并不是以 `b` 开头。
 
-例如, `^(T|t)he` 匹配以 `The` 或 `the` 开头的字符串.
+例如,`^(T|t)he` 匹配以 `The` 或 `the` 开头的字符串。
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -315,9 +315,9 @@
 
 ### 2.8.2 `$` 号
 
-同理于 `^` 号, `$` 号用来匹配字符是否是最后一个.
+同理于 `^` 号,`$` 号用来匹配字符是否是最后一个。
 
-例如, `(at\.)$` 匹配以 `at.` 结尾的字符串.
+例如,`(at\.)$` 匹配以 `at.` 结尾的字符串。
 
 
 "(at\.)" => The fat cat. sat. on the mat.
@@ -333,33 +333,33 @@
 
 ##  3. 简写字符集
 
-正则表达式提供一些常用的字符集简写. 如下:
+正则表达式提供一些常用的字符集简写。如下:
 
 |简写|描述|
 |:----:|----|
 |.|除换行符外的所有字符|
-|\w|匹配所有字母数字, 等同于 `[a-zA-Z0-9_]`|
-|\W|匹配所有非字母数字, 即符号, 等同于: `[^\w]`|
-|\d|匹配数字: `[0-9]`|
-|\D|匹配非数字: `[^\d]`|
-|\s|匹配所有空格字符, 等同于: `[\t\n\f\r\p{Z}]`|
-|\S|匹配所有非空格字符: `[^\s]`|
+|\w|匹配所有字母数字,等同于 `[a-zA-Z0-9_]`|
+|\W|匹配所有非字母数字,即符号,等同于: `[^\w]`|
+|\d|匹配数字: `[0-9]`|
+|\D|匹配非数字: `[^\d]`|
+|\s|匹配所有空格字符,等同于: `[\t\n\f\r\p{Z}]`|
+|\S|匹配所有非空格字符: `[^\s]`|
 |\f|匹配一个换页符|
 |\n|匹配一个换行符|
 |\r|匹配一个回车符|
 |\t|匹配一个制表符|
 |\v|匹配一个垂直制表符|
-|\p|匹配 CR/LF (等同于 `\r\n`),用来匹配 DOS 行终止符|
+|\p|匹配 CR/LF(等同于 `\r\n`),用来匹配 DOS 行终止符|
 
-## 4. 零宽度断言(前后预查)
+## 4. 零宽度断言(前后预查)
 
-先行断言和后发断言都属于**非捕获簇**(不捕获文本 ,也不针对组合计进行计数).
-先行断言用于判断所匹配的格式是否在另一个确定的格式之前, 匹配结果不包含该确定格式(仅作为约束).
+先行断言和后发断言都属于**非捕获簇**(不捕获文本 ,也不针对组合计进行计数)。
+先行断言用于判断所匹配的格式是否在另一个确定的格式之前,匹配结果不包含该确定格式(仅作为约束)。
 
-例如, 我们想要获得所有跟在 `$` 符号后的数字, 我们可以使用正后发断言 `(?<=\$)[0-9\.]*`.
-这个表达式匹配 `$` 开头, 之后跟着 `0,1,2,3,4,5,6,7,8,9,.` 这些字符可以出现大于等于 0 次.
+例如,我们想要获得所有跟在 `$` 符号后的数字,我们可以使用正后发断言 `(?<=\$)[0-9\.]*`。
+这个表达式匹配 `$` 开头,之后跟着 `0,1,2,3,4,5,6,7,8,9,.` 这些字符可以出现大于等于 0 次。
 
-零宽度断言如下:
+零宽度断言如下:
 
 |符号|描述|
 |:----:|----|
@@ -370,13 +370,13 @@
 
 ### 4.1 `?=...` 正先行断言
 
-`?=...` 正先行断言, 表示第一部分表达式之后必须跟着 `?=...`定义的表达式.
+`?=...` 正先行断言,表示第一部分表达式之后必须跟着 `?=...`定义的表达式。
 
-返回结果只包含满足匹配条件的第一部分表达式.
-定义一个正先行断言要使用 `()`. 在括号内部使用一个问号和等号: `(?=...)`. 
+返回结果只包含满足匹配条件的第一部分表达式。
+定义一个正先行断言要使用 `()`。在括号内部使用一个问号和等号: `(?=...)`。
 
-正先行断言的内容写在括号中的等号后面.
-例如, 表达式 `(T|t)he(?=\sfat)` 匹配 `The` 和 `the`, 在括号中我们又定义了正先行断言 `(?=\sfat)` ,即 `The` 和 `the` 后面紧跟着 `(空格)fat`.
+正先行断言的内容写在括号中的等号后面。
+例如,表达式 `(T|t)he(?=\sfat)` 匹配 `The` 和 `the`,在括号中我们又定义了正先行断言 `(?=\sfat)` ,即 `The` 和 `the` 后面紧跟着 `(空格)fat`。
 
 
 "(T|t)he(?=\sfat)" => The fat cat sat on the mat.
@@ -386,10 +386,10 @@
 
 ### 4.2 `?!...` 负先行断言
 
-负先行断言 `?!` 用于筛选所有匹配结果, 筛选条件为 其后不跟随着断言中定义的格式.
-`正先行断言`  定义和 `负先行断言` 一样, 区别就是 `=` 替换成 `!` 也就是 `(?!...)`.
+负先行断言 `?!` 用于筛选所有匹配结果,筛选条件为 其后不跟随着断言中定义的格式。
+`正先行断言`  定义和 `负先行断言` 一样,区别就是 `=` 替换成 `!` 也就是 `(?!...)`。
 
-表达式 `(T|t)he(?!\sfat)` 匹配 `The` 和 `the`, 且其后不跟着 `(空格)fat`.
+表达式 `(T|t)he(?!\sfat)` 匹配 `The` 和 `the`,且其后不跟着 `(空格)fat`。
 
 
 "(T|t)he(?!\sfat)" => The fat cat sat on the mat.
@@ -399,8 +399,8 @@
 
 ### 4.3 `?<= ...` 正后发断言
 
-正后发断言 记作`(?<=...)` 用于筛选所有匹配结果, 筛选条件为 其前跟随着断言中定义的格式.
-例如, 表达式 `(?<=(T|t)he\s)(fat|mat)` 匹配 `fat` 和 `mat`, 且其前跟着 `The` 或 `the`.
+正后发断言 记作`(?<=...)` 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。
+例如,表达式 `(?<=(T|t)he\s)(fat|mat)` 匹配 `fat` 和 `mat`,且其前跟着 `The` 或 `the`。
 
 
 "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -410,8 +410,8 @@
 
 ### 4.4 `?
 "(?<!(T|t)he\s)(cat)" => The cat sat on cat.
@@ -421,19 +421,19 @@
 
 ## 5. 标志
 
-标志也叫模式修正符, 因为它可以用来修改表达式的搜索结果.
-这些标志可以任意的组合使用, 它也是整个正则表达式的一部分.
+标志也叫模式修正符,因为它可以用来修改表达式的搜索结果。
+这些标志可以任意的组合使用,它也是整个正则表达式的一部分。
 
 |标志|描述|
 |:----:|----|
-|i|忽略大小写.|
-|g|全局搜索.|
-|m|多行的: 锚点元字符 `^` `$` 工作范围在每行的起始.|
+|i|忽略大小写。|
+|g|全局搜索。|
+|m|多行修饰符:锚点元字符 `^` `$` 工作范围在每行的起始。|
 
-### 5.1 忽略大小写 (Case Insensitive)
+### 5.1 忽略大小写(Case Insensitive)
 
-修饰语 `i` 用于忽略大小写.
-例如, 表达式 `/The/gi` 表示在全局搜索 `The`, 在后面的 `i` 将其条件修改为忽略大小写, 则变成搜索 `the` 和 `The`, `g` 表示全局搜索.
+修饰语 `i` 用于忽略大小写。
+例如,表达式 `/The/gi` 表示在全局搜索 `The`,在后面的 `i` 将其条件修改为忽略大小写,则变成搜索 `the` 和 `The`,`g` 表示全局搜索。
 
 
 "The" => The fat cat sat on the mat.
@@ -447,10 +447,10 @@
 
 [在线练习](https://regex101.com/r/ahfiuh/1)
 
-### 5.2 全局搜索 (Global search)
+### 5.2 全局搜索(Global search)
 
-修饰符 `g` 常用于执行一个全局搜索匹配, 即(不仅仅返回第一个匹配的, 而是返回全部).
-例如, 表达式 `/.(at)/g` 表示搜索 任意字符(除了换行) + `at`, 并返回全部结果.
+修饰符 `g` 常用于执行一个全局搜索匹配,即(不仅仅返回第一个匹配的,而是返回全部)。
+例如,表达式 `/.(at)/g` 表示搜索 任意字符(除了换行)+ `at`,并返回全部结果。
 
 
 "/.(at)/" => The fat cat sat on the mat.
@@ -464,13 +464,13 @@
 
 [在线练习](https://regex101.com/r/dO1nef/1)
 
-### 5.3 多行修饰符 (Multiline)
+### 5.3 多行修饰符(Multiline)
 
-多行修饰符 `m` 常用于执行一个多行匹配.
+多行修饰符 `m` 常用于执行一个多行匹配。
 
-像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 `m`.
+像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾。但我们如果想要它在每行的开头和结尾生效,我们需要用到多行修饰符 `m`。
 
-例如, 表达式 `/at(.)?$/gm` 表示小写字符 `a` 后跟小写字符 `t` , 末尾可选除换行符外任意字符. 根据 `m` 修饰符, 现在表达式匹配每行的结尾.
+例如,表达式 `/at(.)?$/gm` 表示小写字符 `a` 后跟小写字符 `t` ,末尾可选除换行符外任意字符。根据 `m` 修饰符,现在表达式匹配每行的结尾。
 
 
 "/.at(.)?$/" => The fat
@@ -488,7 +488,7 @@
 
 [在线练习](https://regex101.com/r/E88WE2/1)
 
-### 6. 贪婪匹配与惰性匹配 (Greedy vs lazy matching)
+### 6. 贪婪匹配与惰性匹配(Greedy vs lazy matching)
 
 正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 `?` 将贪婪匹配模式转化为惰性匹配模式。
 
@@ -500,7 +500,6 @@
 
 "/(.*?at)/" => The fat cat sat on the mat. 
- [在线练习](https://regex101.com/r/AyAdgJ/2) ## 贡献 From fbc008255920613f55ac6d80e36c6f0ec30eeb53 Mon Sep 17 00:00:00 2001 From: Yang Jin Date: Mon, 21 Oct 2019 15:33:41 +0800 Subject: [PATCH 076/156] update part of Chinese translation --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 06c2a367..eac7056a 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -35,7 +35,7 @@ > 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。 -一个正则表达式是在一个主体字符串中从左到右匹配字符串时的一种样式。 +一个正则表达式是一种从左到右匹配主体字符串的模式。 “Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。 正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。 From 7e5a3f43ace034ace31beb743340bf0e09432153 Mon Sep 17 00:00:00 2001 From: Hamzeh Javadi Date: Sun, 27 Oct 2019 08:47:47 +0330 Subject: [PATCH 077/156] =?UTF-8?q?=D8=AF=D9=88=20=D9=BE=D8=A7=D8=B1=D8=A7?= =?UTF-8?q?=DA=AF=D8=B1=D8=A7=D9=81=20=D8=A2=D8=BA=D8=A7=D8=B2=20=DA=A9?= =?UTF-8?q?=D8=A7=D8=B1=DB=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit به همراه لینک برگردان فارسی از تمام زبانهای موجود --- README.md | 1 + translations/README-cn.md | 1 + translations/README-es.md | 1 + translations/README-fa.md | 598 +++++++++++++++++++++++++++++++++++ translations/README-fr.md | 1 + translations/README-gr.md | 1 + translations/README-hu.md | 1 + translations/README-ja.md | 1 + translations/README-ko.md | 1 + translations/README-pl.md | 1 + translations/README-pt_BR.md | 1 + translations/README-ru.md | 1 + translations/README-tr.md | 1 + translations/README-vn.md | 1 + 14 files changed, 611 insertions(+) create mode 100644 translations/README-fa.md diff --git a/README.md b/README.md index 3a5c0557..f6b409bd 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ * [Polish](translations/README-pl.md) * [Русский](translations/README-ru.md) * [Tiếng Việt](translations/README-vn.md) +* [قارسی](translations/README-fa.md) ## What is Regular Expression? diff --git a/translations/README-cn.md b/translations/README-cn.md index eac7056a..f0d89ccb 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## 什么是正则表达式? diff --git a/translations/README-es.md b/translations/README-es.md index da6d3e15..782d94e3 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## 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. diff --git a/translations/README-fa.md b/translations/README-fa.md new file mode 100644 index 00000000..8a7a98cf --- /dev/null +++ b/translations/README-fa.md @@ -0,0 +1,598 @@ +

+
+ + Learn Regex + +

+

+ + + + + + +

+

+ +## برگردان ها: + +* [English](../README.md) +* [Español](../translations/README-es.md) +* [Français](../translations/README-fr.md) +* [Português do Brasil](../translations/README-pt_BR.md) +* [中文版](../translations/README-cn.md) +* [日本語](../translations/README-ja.md) +* [한국어](../translations/README-ko.md) +* [Turkish](../translations/README-tr.md) +* [Greek](../translations/README-gr.md) +* [Magyar](../translations/README-hu.md) +* [Polish](../translations/README-pl.md) +* [Русский](../translations/README-ru.md) +* [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) + +
+## عبارت منظم چیست؟ +
+> عبارت منظم یک گروه از کارکترها یا نمادهاست که برای پیدا کردن یک الگوی مشخص در یک متن به کار گرفته می شود. + +یک عبارت منظم یک الگو است که با رشته ای حاص مطابقت دارد. عبارت منظم در اعتبار سنجی داده های ورودی فرم ها، پیدا کردن یک زیر متن در یک متن بزرگتر بر اساس یک الگوی ویژ] و مواردی از این دست به کار گرفته می شود. عبارت "Regular expression" کمی ثقیل است، پس معمولا بیشتر مخفف آن - "regex" یا "regexp" - را به کار می برند. + +فرض کنید یه برنامه نوشته اید و می خواهید قوانینی برای گزینش نام کاربری برا کاربران بگزارید. می خواهیم اجازه دهی که نام کاربری شامل حروف، اعداد، خط زیر و خط فاصله باشد. همچنین می خواهیم تعداد مشخصه ها یا همان کارکترها در نام کاربری محدود کنیم . ما از چنین عبارت منظمی برای اعتبار سنجی نام کاربری استفاده می کنیم: + +

+

+ Regular expression +

+ +عبارت منظم به کار رفته در اینجا رشته `john_doe` و `jo-hn_doe` و `john12_as` می پذیرد ولی `Jo` را به دلیل کوتاه بودن بیش از حد و همچنین به کار بردن حروف بزرگ نمی پذیرد. + +## Table of Contents + +- [Basic Matchers](#1-basic-matchers) +- [Meta character](#2-meta-characters) + - [Full stop](#21-full-stop) + - [Character set](#22-character-set) + - [Negated character set](#221-negated-character-set) + - [Repetitions](#23-repetitions) + - [The Star](#231-the-star) + - [The Plus](#232-the-plus) + - [The Question Mark](#233-the-question-mark) + - [Braces](#24-braces) + - [Character Group](#25-character-group) + - [Alternation](#26-alternation) + - [Escaping special character](#27-escaping-special-character) + - [Anchors](#28-anchors) + - [Caret](#281-caret) + - [Dollar](#282-dollar) +- [Shorthand Character Sets](#3-shorthand-character-sets) +- [Lookaround](#4-lookaround) + - [Positive Lookahead](#41-positive-lookahead) + - [Negative Lookahead](#42-negative-lookahead) + - [Positive Lookbehind](#43-positive-lookbehind) + - [Negative Lookbehind](#44-negative-lookbehind) +- [Flags](#5-flags) + - [Case Insensitive](#51-case-insensitive) + - [Global search](#52-global-search) + - [Multiline](#53-multiline) +- [Greedy vs lazy matching](#6-greedy-vs-lazy-matching) + +## 1. Basic Matchers + +A regular expression is just a pattern of characters that we use to perform +search in a text. For example, the regular expression `the` means: the letter +`t`, followed by the letter `h`, followed by the letter `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dmRygT/1) + +The regular expression `123` matches the string `123`. The regular expression is +matched against an input string by comparing each character in the regular +expression to each character in the input string, one after another. Regular +expressions are normally case-sensitive so the regular expression `The` would +not match the string `the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/1paXsy/1) + +## 2. Meta Characters + +Meta characters are the building blocks of the regular expressions. Meta +characters do not stand for themselves but instead are interpreted in some +special way. Some meta characters have a special meaning and are written inside +square brackets. The meta characters are as follows: + +|Meta character|Description| +|:----:|----| +|.|Period matches any single character except a line break.| +|[ ]|Character class. Matches any character contained between the square brackets.| +|[^ ]|Negated character class. Matches any character that is not contained between the square brackets| +|*|Matches 0 or more repetitions of the preceding symbol.| +|+|Matches 1 or more repetitions of the preceding symbol.| +|?|Makes the preceding symbol optional.| +|{n,m}|Braces. Matches at least "n" but not more than "m" repetitions of the preceding symbol.| +|(xyz)|Character group. Matches the characters xyz in that exact order.| +|||Alternation. Matches either the characters before or the characters after the symbol.| +|\|Escapes the next character. This allows you to match reserved characters [ ] ( ) { } . * + ? ^ $ \ || +|^|Matches the beginning of the input.| +|$|Matches the end of the input.| + +## 2.1 Full stop + +Full stop `.` is the simplest example of meta character. The meta character `.` +matches any single character. It will not match return or newline characters. +For example, the regular expression `.ar` means: any character, followed by the +letter `a`, followed by the letter `r`. + +
+".ar" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/xc9GkU/1) + +## 2.2 Character set + +Character sets are also called character class. Square brackets are used to +specify character sets. Use a hyphen inside a character set to specify the +characters' range. The order of the character range inside square brackets +doesn't matter. For example, the regular expression `[Tt]he` means: an uppercase +`T` or lowercase `t`, followed by the letter `h`, followed by the letter `e`. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/2ITLQ4/1) + +A period inside a character set, however, means a literal period. The regular +expression `ar[.]` means: a lowercase character `a`, followed by letter `r`, +followed by a period `.` character. + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Test the regular expression](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Negated character set + +In general, the caret symbol represents the start of the string, but when it is +typed after the opening square bracket it negates the character set. For +example, the regular expression `[^c]ar` means: any character except `c`, +followed by the character `a`, followed by the letter `r`. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/nNNlq3/1) + +## 2.3 Repetitions + +Following meta characters `+`, `*` or `?` are used to specify how many times a +subpattern can occur. These meta characters act differently in different +situations. + +### 2.3.1 The Star + +The symbol `*` matches zero or more repetitions of the preceding matcher. The +regular expression `a*` means: zero or more repetitions of preceding lowercase +character `a`. But if it appears after a character set or class then it finds +the repetitions of the whole character set. For example, the regular expression +`[a-z]*` means: any number of lowercase letters in a row. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Test the regular expression](https://regex101.com/r/7m8me5/1) + +The `*` symbol can be used with the meta character `.` to match any string of +characters `.*`. The `*` symbol can be used with the whitespace character `\s` +to match a string of whitespace characters. For example, the expression +`\s*cat\s*` means: zero or more spaces, followed by lowercase character `c`, +followed by lowercase character `a`, followed by lowercase character `t`, +followed by zero or more spaces. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Test the regular expression](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 The Plus + +The symbol `+` matches one or more repetitions of the preceding character. For +example, the regular expression `c.+t` means: lowercase letter `c`, followed by +at least one character, followed by the lowercase character `t`. It needs to be +clarified that `t` is the last `t` in the sentence. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 The Question Mark + +In regular expression the meta character `?` makes the preceding character +optional. This symbol matches zero or one instance of the preceding character. +For example, the regular expression `[T]?he` means: Optional the uppercase +letter `T`, followed by the lowercase character `h`, followed by the lowercase +character `e`. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/kPpO2x/1) + +## 2.4 Braces + +In regular expression braces that are also called quantifiers are used to +specify the number of times that a character or a group of characters can be +repeated. For example, the regular expression `[0-9]{2,3}` means: Match at least +2 digits but not more than 3 ( characters in the range of 0 to 9). + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/juM86s/1) + +We can leave out the second number. For example, the regular expression +`[0-9]{2,}` means: Match 2 or more digits. If we also remove the comma the +regular expression `[0-9]{3}` means: Match exactly 3 digits. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Sivu30/1) + +## 2.5 Capturing Group + +A capturing group is a group of sub-patterns that is written inside Parentheses +`(...)`. Like as we discussed before that in regular expression if we put a quantifier +after a character then it will repeat the preceding character. But if we put quantifier +after a capturing group then it repeats the whole capturing group. For example, +the regular expression `(ab)*` matches zero or more repetitions of the character +"ab". We can also use the alternation `|` meta character inside capturing group. +For example, the regular expression `(c|g|p)ar` means: lowercase character `c`, +`g` or `p`, followed by character `a`, followed by character `r`. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/tUxrBG/1) + +Note that capturing groups do not only match but also capture the characters for use in +the parent language. The parent language could be python or javascript or virtually any +language that implements regular expressions in a function definition. + +### 2.5.1 Non-capturing group + +A non-capturing group is a capturing group that only matches the characters, but +does not capture the group. A non-capturing group is denoted by a `?` followed by a `:` +within parenthesis `(...)`. For example, the regular expression `(?:c|g|p)ar` is similar to +`(c|g|p)ar` in that it matches the same characters but will not create a capture group. + +
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/Rm7Me8/1) + +Non-capturing groups can come in handy when used in find-and-replace functionality or +when mixed with capturing groups to keep the overview when producing any other kind of output. +See also [4. Lookaround](#4-lookaround). + +## 2.6 Alternation + +In a regular expression, the vertical bar `|` is used to define alternation. +Alternation is like an OR statement between multiple expressions. Now, you may be +thinking that character set and alternation works the same way. But the big +difference between character set and alternation is that character set works on +character level but alternation works on expression level. For example, the +regular expression `(T|t)he|car` means: either (uppercase character `T` or lowercase +`t`, followed by lowercase character `h`, followed by lowercase character `e`) OR +(lowercase character `c`, followed by lowercase character `a`, followed by +lowercase character `r`). Note that I put the parentheses for clarity, to show that either expression +in parentheses can be met and it will match. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/fBXyX0/1) + +## 2.7 Escaping special character + +Backslash `\` is used in regular expression to escape the next character. This +allows us to specify a symbol as a matching character including reserved +characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching +character prepend `\` before it. + +For example, the regular expression `.` is used to match any character except +newline. Now to match `.` in an input string the regular expression +`(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase +character `a`, followed by lowercase letter `t`, followed by optional `.` +character. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/DOc5Nu/1) + +## 2.8 Anchors + +In regular expressions, we use anchors to check if the matching symbol is the +starting symbol or ending symbol of the input string. Anchors are of two types: +First type is Caret `^` that check if the matching character is the start +character of the input and the second type is Dollar `$` that checks if matching +character is the last character of the input string. + +### 2.8.1 Caret + +Caret `^` symbol is used to check if matching character is the first character +of the input string. If we apply the following regular expression `^a` (if a is +the starting symbol) to input string `abc` it matches `a`. But if we apply +regular expression `^b` on above input string it does not match anything. +Because in input string `abc` "b" is not the starting symbol. Let's take a look +at another regular expression `^(T|t)he` which means: uppercase character `T` or +lowercase character `t` is the start symbol of the input string, followed by +lowercase character `h`, followed by lowercase character `e`. + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Dollar + +Dollar `$` symbol is used to check if matching character is the last character +of the input string. For example, regular expression `(at\.)$` means: a +lowercase character `a`, followed by lowercase character `t`, followed by a `.` +character and the matcher must be end of the string. + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/t0AkOd/1) + +## 3. Shorthand Character Sets + +Regular expression provides shorthands for the commonly used character sets, +which offer convenient shorthands for commonly used regular expressions. The +shorthand character sets are as follows: + +|Shorthand|Description| +|:----:|----| +|.|Any character except new line| +|\w|Matches alphanumeric characters: `[a-zA-Z0-9_]`| +|\W|Matches non-alphanumeric characters: `[^\w]`| +|\d|Matches digit: `[0-9]`| +|\D|Matches non-digit: `[^\d]`| +|\s|Matches whitespace character: `[\t\n\f\r\p{Z}]`| +|\S|Matches non-whitespace character: `[^\s]`| + +## 4. Lookaround + +Lookbehind and lookahead (also called lookaround) are specific types of +***non-capturing groups*** (Used to match the pattern but not included in matching +list). Lookarounds are used when we have the condition that this pattern is +preceded or followed by another certain pattern. For example, we want to get all +numbers that are preceded by `$` character from the following input string +`$4.44 and $10.88`. We will use following regular expression `(?<=\$)[0-9\.]*` +which means: get all the numbers which contain `.` character and are preceded +by `$` character. Following are the lookarounds that are used in regular +expressions: + +|Symbol|Description| +|:----:|----| +|?=|Positive Lookahead| +|?!|Negative Lookahead| +|?<=|Positive Lookbehind| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. +
+ +[Test the regular expression](https://regex101.com/r/IDDARt/1) + +### 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 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 +from input string that are not followed by the word `fat` precedes by a space +character. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/V32Npg/1) + +### 4.3 Positive Lookbehind + +Positive lookbehind is used to get all the matches that are preceded by a +specific pattern. Positive lookbehind is denoted by `(?<=...)`. For example, the +regular expression `(?<=(T|t)he\s)(fat|mat)` means: get all `fat` or `mat` words +from input string that are after the word `The` or `the`. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/avH165/1) + +### 4.4 Negative Lookbehind + +Negative lookbehind is used to get all the matches that are not preceded by a +specific pattern. Negative lookbehind is denoted by `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. +
+ +[Test the regular expression](https://regex101.com/r/8Efx5G/1) + +## 5. Flags + +Flags are also called modifiers because they modify the output of a regular +expression. These flags can be used in any order or combination, and are an +integral part of the RegExp. + +|Flag|Description| +|:----:|----| +|i|Case insensitive: Sets matching to be case-insensitive.| +|g|Global Search: Search for a pattern throughout the input string.| +|m|Multiline: Anchor meta character works on each line.| + +### 5.1 Case Insensitive + +The `i` modifier is used to perform case-insensitive matching. For example, the +regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase +character `h`, followed by character `e`. And at the end of regular expression +the `i` flag tells the regular expression engine to ignore the case. As you can +see we also provided `g` flag because we want to search for the pattern in the +whole input string. + +
+"The" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/ahfiuh/1) + +### 5.2 Global search + +The `g` modifier is used to perform a global match (find all matches rather than +stopping after the first match). For example, the regular expression`/.(at)/g` +means: any character except new line, followed by lowercase character `a`, +followed by lowercase character `t`. Because we provided `g` flag at the end of +the regular expression now it will find all matches in the input string, not just the first one (which is the default behavior). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/dO1nef/1) + +### 5.3 Multiline + +The `m` modifier is used to perform a multi-line match. As we discussed earlier +anchors `(^, $)` are used to check if pattern is the beginning of the input or +end of the input string. But if we want that anchors works on each line we use +`m` flag. For example, the regular expression `/at(.)?$/gm` means: lowercase +character `a`, followed by lowercase character `t`, optionally anything except +new line. And because of `m` flag now regular expression engine matches pattern +at the end of each line in a string. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/E88WE2/1) + +## 6. Greedy vs lazy matching +By default regex will do greedy matching , means it will match as long as +possible. we can use `?` to match in lazy way means as short as possible + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Test the regular expression](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[Test the regular expression](https://regex101.com/r/AyAdgJ/2) + + +## Contribution + +* Open pull request with improvements +* Discuss ideas in issues +* Spread the word +* Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## License + +MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) diff --git a/translations/README-fr.md b/translations/README-fr.md index 4d495e97..db28f7b6 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## Qu'est-ce qu'une expression régulière? diff --git a/translations/README-gr.md b/translations/README-gr.md index 7d62a6e6..2e2141c1 100644 --- a/translations/README-gr.md +++ b/translations/README-gr.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## Τι είναι μια Κανονική Έκφραση (Regular Expression); diff --git a/translations/README-hu.md b/translations/README-hu.md index 1017260f..e0c5ab02 100644 --- a/translations/README-hu.md +++ b/translations/README-hu.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## Mi az a reguláris kifejezés? diff --git a/translations/README-ja.md b/translations/README-ja.md index cb8df84a..18ed0f13 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## 正規表現とは diff --git a/translations/README-ko.md b/translations/README-ko.md index 05ae2977..577bbfbb 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## 정규표현식이란 무엇인가? diff --git a/translations/README-pl.md b/translations/README-pl.md index c5213f51..84c50ef8 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## Co to jest wyrażenie regularne? diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md index 90170f48..d20b67b0 100644 --- a/translations/README-pt_BR.md +++ b/translations/README-pt_BR.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## O que é uma Expressão Regular? diff --git a/translations/README-ru.md b/translations/README-ru.md index 8e7ccdea..0dc6c677 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -29,6 +29,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## Что такое Регулярное выражение? diff --git a/translations/README-tr.md b/translations/README-tr.md index 8e601187..d4713378 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -30,6 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## Düzenli İfade Nedir? diff --git a/translations/README-vn.md b/translations/README-vn.md index 60c51e8d..a2920559 100644 --- a/translations/README-vn.md +++ b/translations/README-vn.md @@ -31,6 +31,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [قارسی](../translations/README-fa.md) ## Biểu thức chính quy là gì? From 3faa6199f48138f3f5f8ac8cd8844cc027099bfd Mon Sep 17 00:00:00 2001 From: Hamzeh Javadi Date: Sun, 27 Oct 2019 08:52:54 +0330 Subject: [PATCH 078/156] Update README-fa.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit راست به چپ کردن و اصلاح تصویر --- translations/README-fa.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/translations/README-fa.md b/translations/README-fa.md index 8a7a98cf..7cdee38a 100644 --- a/translations/README-fa.md +++ b/translations/README-fa.md @@ -31,10 +31,12 @@ * [Tiếng Việt](../translations/README-vn.md) * [قارسی](../translations/README-fa.md) -
+
## عبارت منظم چیست؟
+
> عبارت منظم یک گروه از کارکترها یا نمادهاست که برای پیدا کردن یک الگوی مشخص در یک متن به کار گرفته می شود. +
یک عبارت منظم یک الگو است که با رشته ای حاص مطابقت دارد. عبارت منظم در اعتبار سنجی داده های ورودی فرم ها، پیدا کردن یک زیر متن در یک متن بزرگتر بر اساس یک الگوی ویژ] و مواردی از این دست به کار گرفته می شود. عبارت "Regular expression" کمی ثقیل است، پس معمولا بیشتر مخفف آن - "regex" یا "regexp" - را به کار می برند. @@ -42,11 +44,11 @@

- Regular expression + Regular expression

- +
عبارت منظم به کار رفته در اینجا رشته `john_doe` و `jo-hn_doe` و `john12_as` می پذیرد ولی `Jo` را به دلیل کوتاه بودن بیش از حد و همچنین به کار بردن حروف بزرگ نمی پذیرد. - +
## Table of Contents - [Basic Matchers](#1-basic-matchers) From f8088499c869b37922edc86201bcab2a1b40af49 Mon Sep 17 00:00:00 2001 From: Hamzeh Javadi Date: Sun, 27 Oct 2019 09:06:43 +0330 Subject: [PATCH 079/156] Update README-fa.md some rtl test --- translations/README-fa.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/translations/README-fa.md b/translations/README-fa.md index 7cdee38a..02a76be1 100644 --- a/translations/README-fa.md +++ b/translations/README-fa.md @@ -32,16 +32,19 @@ * [قارسی](../translations/README-fa.md)
+ ## عبارت منظم چیست؟
+ > عبارت منظم یک گروه از کارکترها یا نمادهاست که برای پیدا کردن یک الگوی مشخص در یک متن به کار گرفته می شود.
+
یک عبارت منظم یک الگو است که با رشته ای حاص مطابقت دارد. عبارت منظم در اعتبار سنجی داده های ورودی فرم ها، پیدا کردن یک زیر متن در یک متن بزرگتر بر اساس یک الگوی ویژ] و مواردی از این دست به کار گرفته می شود. عبارت "Regular expression" کمی ثقیل است، پس معمولا بیشتر مخفف آن - "regex" یا "regexp" - را به کار می برند. فرض کنید یه برنامه نوشته اید و می خواهید قوانینی برای گزینش نام کاربری برا کاربران بگزارید. می خواهیم اجازه دهی که نام کاربری شامل حروف، اعداد، خط زیر و خط فاصله باشد. همچنین می خواهیم تعداد مشخصه ها یا همان کارکترها در نام کاربری محدود کنیم . ما از چنین عبارت منظمی برای اعتبار سنجی نام کاربری استفاده می کنیم: - +


Regular expression @@ -49,7 +52,9 @@

عبارت منظم به کار رفته در اینجا رشته `john_doe` و `jo-hn_doe` و `john12_as` می پذیرد ولی `Jo` را به دلیل کوتاه بودن بیش از حد و همچنین به کار بردن حروف بزرگ نمی پذیرد.
-## Table of Contents +
+ +## فهرست - [Basic Matchers](#1-basic-matchers) - [Meta character](#2-meta-characters) @@ -78,6 +83,7 @@ - [Global search](#52-global-search) - [Multiline](#53-multiline) - [Greedy vs lazy matching](#6-greedy-vs-lazy-matching) +
## 1. Basic Matchers From a817604833c338b71b956d8537b56f1169f4a175 Mon Sep 17 00:00:00 2001 From: Hamzeh Javadi Date: Sun, 27 Oct 2019 09:18:20 +0330 Subject: [PATCH 080/156] paragraph #1 --- translations/README-fa.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/translations/README-fa.md b/translations/README-fa.md index 02a76be1..e17f3bfa 100644 --- a/translations/README-fa.md +++ b/translations/README-fa.md @@ -84,24 +84,23 @@ - [Multiline](#53-multiline) - [Greedy vs lazy matching](#6-greedy-vs-lazy-matching)
+
-## 1. Basic Matchers - -A regular expression is just a pattern of characters that we use to perform -search in a text. For example, the regular expression `the` means: the letter -`t`, followed by the letter `h`, followed by the letter `e`. +## 1. پایه ای ترین همخوانی +یک عبارت منظم در واقع یک الگو برای جست و جو در یک متن است. برای مثال عبارت منظم `the` به معنی : حرف +`t`, پس از آن حرف `h`, پس از آن حرف `e` است. +
 "the" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/dmRygT/1) -The regular expression `123` matches the string `123`. The regular expression is -matched against an input string by comparing each character in the regular -expression to each character in the input string, one after another. Regular -expressions are normally case-sensitive so the regular expression `The` would -not match the string `the`. +
+[عبارت منظم را در عمل ببینید](https://regex101.com/r/dmRygT/1) + +عبارت منظم `123` با رشته `123` مطابقت دارد. عبارت منظم با مقایسه حرف به حرف و کارکتر به کارکترش با متن مورد نظر تطابق را می یابد. همچنین عبارت منظم حساس به اندازه (بزرگی یا کوچکی حروف) هستند. بنابر این واژه ی `The` با `the` همخوان نیست. +
 "The" => The fat cat sat on the mat.

From fa254f2de75b566c8f08415bfe55d732c95158bb Mon Sep 17 00:00:00 2001
From: Hamzeh Javadi 
Date: Sun, 27 Oct 2019 09:26:46 +0330
Subject: [PATCH 081/156] =?UTF-8?q?=D8=A7=D8=B5=D9=84=D8=A7=D8=AD=20=D9=84?=
 =?UTF-8?q?=DB=8C=D9=86=DA=A9=20=D8=A8=D9=87=20=D8=A8=D8=B1=DA=AF=D8=B1?=
 =?UTF-8?q?=D8=AF=D8=A7=D9=86=20=D9=81=D8=A7=D8=B1=D8=B3=DB=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md                        |  2 +-
 translations/README-cn.md        |  2 +-
 translations/README-es.md        |  2 +-
 translations/README-fa.md        | 11 +++++++----
 translations/README-fr.md        |  2 +-
 translations/README-gr.md        |  2 +-
 translations/README-hu.md        |  2 +-
 translations/README-ja.md        |  2 +-
 translations/README-ko.md        |  2 +-
 translations/README-pl.md        |  2 +-
 translations/README-pt_BR.md     |  2 +-
 translations/README-ru.md        |  2 +-
 translations/README-tr.md        |  2 +-
 translations/README-vn.md        |  2 +-
 translations/README-zh-simple.md |  1 +
 15 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/README.md b/README.md
index f6b409bd..3c50e7cc 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
 * [Polish](translations/README-pl.md)
 * [Русский](translations/README-ru.md)
 * [Tiếng Việt](translations/README-vn.md)
-* [قارسی](translations/README-fa.md)
+* [فارسی](translations/README-fa.md)
 
 ## What is Regular Expression?
 
diff --git a/translations/README-cn.md b/translations/README-cn.md
index f0d89ccb..a16a71db 100644
--- a/translations/README-cn.md
+++ b/translations/README-cn.md
@@ -30,7 +30,7 @@
 * [Polish](../translations/README-pl.md)
 * [Русский](../translations/README-ru.md)
 * [Tiếng Việt](../translations/README-vn.md)
-* [قارسی](../translations/README-fa.md)
+* [فارسی](../translations/README-fa.md)
 
 ## 什么是正则表达式?
 
diff --git a/translations/README-es.md b/translations/README-es.md
index 782d94e3..51d54a7e 100644
--- a/translations/README-es.md
+++ b/translations/README-es.md
@@ -30,7 +30,7 @@
 * [Polish](../translations/README-pl.md)
 * [Русский](../translations/README-ru.md)
 * [Tiếng Việt](../translations/README-vn.md)
-* [قارسی](../translations/README-fa.md)
+* [فارسی](../translations/README-fa.md)
 
 ## 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.
diff --git a/translations/README-fa.md b/translations/README-fa.md
index e17f3bfa..c95869a8 100644
--- a/translations/README-fa.md
+++ b/translations/README-fa.md
@@ -29,7 +29,7 @@
 * [Polish](../translations/README-pl.md)
 * [Русский](../translations/README-ru.md)
 * [Tiếng Việt](../translations/README-vn.md)
-* [قارسی](../translations/README-fa.md)
+* [فارسی](../translations/README-fa.md)
 
 
@@ -56,7 +56,7 @@ ## فهرست -- [Basic Matchers](#1-basic-matchers) +- [پایه ای ترین همخوانی](#1-basic-matchers) - [Meta character](#2-meta-characters) - [Full stop](#21-full-stop) - [Character set](#22-character-set) @@ -95,8 +95,8 @@ "the" => The fat cat sat on the mat.
-
+ [عبارت منظم را در عمل ببینید](https://regex101.com/r/dmRygT/1) عبارت منظم `123` با رشته `123` مطابقت دارد. عبارت منظم با مقایسه حرف به حرف و کارکتر به کارکترش با متن مورد نظر تطابق را می یابد. همچنین عبارت منظم حساس به اندازه (بزرگی یا کوچکی حروف) هستند. بنابر این واژه ی `The` با `the` همخوان نیست. @@ -106,7 +106,10 @@ "The" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/1paXsy/1) +
+ +[این عبارت منظم را در عمل ببنیند](https://regex101.com/r/1paXsy/1) +
## 2. Meta Characters diff --git a/translations/README-fr.md b/translations/README-fr.md index db28f7b6..c51668cc 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -30,7 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## Qu'est-ce qu'une expression régulière? diff --git a/translations/README-gr.md b/translations/README-gr.md index 2e2141c1..2e6dd9d9 100644 --- a/translations/README-gr.md +++ b/translations/README-gr.md @@ -30,7 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## Τι είναι μια Κανονική Έκφραση (Regular Expression); diff --git a/translations/README-hu.md b/translations/README-hu.md index e0c5ab02..e8c52394 100644 --- a/translations/README-hu.md +++ b/translations/README-hu.md @@ -30,7 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## Mi az a reguláris kifejezés? diff --git a/translations/README-ja.md b/translations/README-ja.md index 18ed0f13..6acf9ae4 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -30,7 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## 正規表現とは diff --git a/translations/README-ko.md b/translations/README-ko.md index 577bbfbb..d4c9c0bb 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -30,7 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## 정규표현식이란 무엇인가? diff --git a/translations/README-pl.md b/translations/README-pl.md index 84c50ef8..fd1d04ca 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -30,7 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## Co to jest wyrażenie regularne? diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md index d20b67b0..774cd219 100644 --- a/translations/README-pt_BR.md +++ b/translations/README-pt_BR.md @@ -30,7 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## O que é uma Expressão Regular? diff --git a/translations/README-ru.md b/translations/README-ru.md index 0dc6c677..ed2e668d 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -29,7 +29,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## Что такое Регулярное выражение? diff --git a/translations/README-tr.md b/translations/README-tr.md index d4713378..41be9dd9 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -30,7 +30,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## Düzenli İfade Nedir? diff --git a/translations/README-vn.md b/translations/README-vn.md index a2920559..0c38faa2 100644 --- a/translations/README-vn.md +++ b/translations/README-vn.md @@ -31,7 +31,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [قارسی](../translations/README-fa.md) +* [فارسی](../translations/README-fa.md) ## Biểu thức chính quy là gì? diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index 8ee4847d..292e8778 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -29,6 +29,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [فارسی](../translations/README-fa.md) ## 什么是正则表达式? From 3fc465e0dd6f3e287ccbb538272cb00c13888917 Mon Sep 17 00:00:00 2001 From: hanhan9449 <1481220484@qq.com> Date: Wed, 30 Oct 2019 09:03:21 +0800 Subject: [PATCH 082/156] Fix a translation error --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index eac7056a..77cb90ea 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -118,7 +118,7 @@ |*|匹配>=0个重复的在*号之前的字符。| |+|匹配>=1个重复的+号前的字符。 |?|标记?之前的字符为可选.| -|{n,m}|匹配num个大括号之前的字符 (n <= num <= m).| +|{n,m}|匹配num个大括号之间的字符 (n <= num <= m).| |(xyz)|字符集,匹配与 xyz 完全相等的字符串.| |||或运算符,匹配符号前或后的字符.| |\|转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ || From ac30dce43841e031e77b8589c6bb17acf24b734a Mon Sep 17 00:00:00 2001 From: yangjin Date: Wed, 30 Oct 2019 23:19:16 +0800 Subject: [PATCH 083/156] Update Chinese translation at section Lookaround --- translations/README-cn.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index eac7056a..5b545380 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -353,11 +353,9 @@ ## 4. 零宽度断言(前后预查) -先行断言和后发断言都属于**非捕获簇**(不捕获文本 ,也不针对组合计进行计数)。 -先行断言用于判断所匹配的格式是否在另一个确定的格式之前,匹配结果不包含该确定格式(仅作为约束)。 +先行断言和后发断言(合称 lookaround)都属于**非捕获组**(用于匹配模式,但不包括在匹配列表中)。当我们需要一个模式的前面或后面有另一个特定的模式时,就可以使用它们。 -例如,我们想要获得所有跟在 `$` 符号后的数字,我们可以使用正后发断言 `(?<=\$)[0-9\.]*`。 -这个表达式匹配 `$` 开头,之后跟着 `0,1,2,3,4,5,6,7,8,9,.` 这些字符可以出现大于等于 0 次。 +例如,我们希望从下面的输入字符串 `$4.44` 和 `$10.88` 中获得所有以 `$` 字符开头的数字,我们将使用以下的正则表达式 `(?<=\$)[0-9\.]*`。意思是:获取所有包含 `.` 并且前面是 `$` 的数字。 零宽度断言如下: From 366bc0da08c98485aebf6515c6c738ebef996c07 Mon Sep 17 00:00:00 2001 From: Jigao Luo_X1 Date: Mon, 6 Jan 2020 17:28:43 +0100 Subject: [PATCH 084/156] new ch translation for word capturing group --- translations/README-zh-simple.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index 292e8778..29a51933 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -64,7 +64,7 @@ * [2.3.2 号](#232--号) * [2.3.3 ? 号](#233--号) * [2.4 {} 号](#24--号) - * [2.5 (...) 特征标群](#25--特征标群) + * [2.5 (...) 捕获组](#25--捕获组) * [2.6 | 或运算符](#26--或运算符) * [2.7 转码特殊字符](#27-转码特殊字符) * [2.8 锚点](#28-锚点) @@ -254,9 +254,9 @@ [在线练习](https://regex101.com/r/Sivu30/1) -## 2.5 `(...)` 特征标群 +## 2.5 `(...)` 捕获组 -特征标群是一组写在 `(...)` 中的子模式. 例如之前说的 `{}` 是用来表示前面一个字符出现指定次数. 但如果在 `{}` 前加入特征标群则表示整个标群内的字符重复 N 次. 例如, 表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`. +捕获组是一组写在 `(...)` 中的子模式. 例如之前说的 `{}` 是用来表示前面一个字符出现指定次数. 但如果在 `{}` 前加入捕获组则表示整个标群内的字符重复 N 次. 例如, 表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`. 我们还可以在 `()` 中用或字符 `|` 表示或. 例如, `(c|g|p)ar` 匹配 `car` 或 `gar` 或 `par`. From 4c48458c422ae6d99a67c19fe0227f05ecd3f012 Mon Sep 17 00:00:00 2001 From: Jigao Luo_X1 Date: Mon, 6 Jan 2020 17:49:36 +0100 Subject: [PATCH 085/156] new ch translation for word non capturing group --- translations/README-zh-simple.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index 29a51933..7f7ba3af 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -348,7 +348,7 @@ ## 4. 前后关联约束(前后预查) -前置约束和后置约束都属于**非捕获簇**(用于匹配不在匹配列表中的格式). +前置约束和后置约束都属于**非捕获组**(用于匹配不在匹配列表中的格式). 前置约束用于判断所匹配的格式是否在另一个确定的格式之后. 例如, 我们想要获得所有跟在 `$` 符号后的数字, 我们可以使用正向向后约束 `(?<=\$)[0-9\.]*`. From 2411b31babe77ce6ebe37165ecef2f6e1ba41050 Mon Sep 17 00:00:00 2001 From: Jigao Luo_X1 Date: Mon, 6 Jan 2020 21:20:47 +0100 Subject: [PATCH 086/156] 5.1, 5.2, 5.3 hyperlink fix --- translations/README-cn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 55984ea1..9f5dddf0 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -431,7 +431,7 @@ |g|全局搜索。| |m|多行修饰符:锚点元字符 `^` `$` 工作范围在每行的起始。| -### 5.1 忽略大小写(Case Insensitive) +### 5.1 忽略大小写 (Case Insensitive) 修饰语 `i` 用于忽略大小写。 例如,表达式 `/The/gi` 表示在全局搜索 `The`,在后面的 `i` 将其条件修改为忽略大小写,则变成搜索 `the` 和 `The`,`g` 表示全局搜索。 @@ -448,7 +448,7 @@ [在线练习](https://regex101.com/r/ahfiuh/1) -### 5.2 全局搜索(Global search) +### 5.2 全局搜索 (Global search) 修饰符 `g` 常用于执行一个全局搜索匹配,即(不仅仅返回第一个匹配的,而是返回全部)。 例如,表达式 `/.(at)/g` 表示搜索 任意字符(除了换行)+ `at`,并返回全部结果。 @@ -465,7 +465,7 @@ [在线练习](https://regex101.com/r/dO1nef/1) -### 5.3 多行修饰符(Multiline) +### 5.3 多行修饰符 (Multiline) 多行修饰符 `m` 常用于执行一个多行匹配。 @@ -489,7 +489,7 @@ [在线练习](https://regex101.com/r/E88WE2/1) -### 6. 贪婪匹配与惰性匹配(Greedy vs lazy matching) +### 6. 贪婪匹配与惰性匹配 (Greedy vs lazy matching) 正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 `?` 将贪婪匹配模式转化为惰性匹配模式。 From 65cbea955e20035434d7492903f86451a4258177 Mon Sep 17 00:00:00 2001 From: wakeheart <60534224+wakeheart@users.noreply.github.com> Date: Sat, 7 Mar 2020 14:24:18 +0800 Subject: [PATCH 087/156] Update README-cn.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改了2.4和2.5的讲解,使其更加符合中文的阅读方式和思考习惯,降低初学者的理解难度。 --- translations/README-cn.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 55984ea1..fcd78ac3 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -227,7 +227,7 @@ ## 2.4 `{}` 号 -在正则表达式中 `{}` 是一个量词,常用来一个或一组字符可以重复出现的次数。 +在正则表达式中 `{}` 是一个量词,常用来限定一个或一组字符可以重复出现的次数。 例如, 表达式 `[0-9]{2,3}` 匹配最少 2 位最多 3 位 0~9 的数字。
@@ -256,7 +256,10 @@
 
 ## 2.5 `(...)` 特征标群
 
-特征标群是一组写在 `(...)` 中的子模式。例如之前说的 `{}` 是用来表示前面一个字符出现指定次数。但如果在 `{}` 前加入特征标群则表示整个标群内的字符重复 N 次。例如,表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`。
+## 2.5 `(...)` 特征标群
+
+特征标群是一组写在 `(...)` 中的子模式。`(...)` 中包含的内容将会被看成一个整体,和数学中小括号( )的作用相同。例如, 表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`。如果没有使用 `(...)` ,那么表达式 `ab*` 将匹配连续出现 0 或更多个 `b` 。再比如之前说的 `{}` 是用来表示前面一个字符出现指定次数。但如果在 `{}` 前加上特征标群 `(...)` 则表示整个标群内的字符重复 N 次。
+
 
 我们还可以在 `()` 中用或字符 `|` 表示或。例如,`(c|g|p)ar` 匹配 `car` 或 `gar` 或 `par`.
 

From 6436a420594a5e3d326992a00d73ffa0e8fbc1fc Mon Sep 17 00:00:00 2001
From: wakeheart <60534224+wakeheart@users.noreply.github.com>
Date: Sat, 7 Mar 2020 14:25:32 +0800
Subject: [PATCH 088/156] Update README-cn.md

---
 translations/README-cn.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/translations/README-cn.md b/translations/README-cn.md
index fcd78ac3..237f4c00 100644
--- a/translations/README-cn.md
+++ b/translations/README-cn.md
@@ -256,8 +256,6 @@
 
 ## 2.5 `(...)` 特征标群
 
-## 2.5 `(...)` 特征标群
-
 特征标群是一组写在 `(...)` 中的子模式。`(...)` 中包含的内容将会被看成一个整体,和数学中小括号( )的作用相同。例如, 表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`。如果没有使用 `(...)` ,那么表达式 `ab*` 将匹配连续出现 0 或更多个 `b` 。再比如之前说的 `{}` 是用来表示前面一个字符出现指定次数。但如果在 `{}` 前加上特征标群 `(...)` 则表示整个标群内的字符重复 N 次。
 
 

From 18c6bf5a984bdc73126201858664858a7aa25cd6 Mon Sep 17 00:00:00 2001
From: Tom McAndrew <42588609+tommcandrew@users.noreply.github.com>
Date: Tue, 10 Mar 2020 17:11:31 +0000
Subject: [PATCH 089/156] Improve grammar and punctuation

---
 README.md | 304 +++++++++++++++++++++++++++---------------------------
 1 file changed, 150 insertions(+), 154 deletions(-)

diff --git a/README.md b/README.md
index 0546c6de..6d534fbe 100644
--- a/README.md
+++ b/README.md
@@ -33,62 +33,63 @@
 
 ## What is Regular Expression?
 
-> Regular expression is a group of characters or symbols which is used to find a specific pattern from a text.
+> A regular expression is a group of characters or symbols which is used to find a specific pattern in a text.
 
 A regular expression is a pattern that is matched against a subject string from
-left to right. Regular expression is used for replacing a text within a string, 
-validating form, extract a substring from a string based upon a pattern match, 
-and so much more. The word "Regular expression" is a mouthful, so you will usually
-find the term abbreviated as "regex" or "regexp". 
+left to right. Regular expressions are used to replace text within a string, 
+validating forms, extracting a substring from a string based on a pattern match, 
+and so much more. The term "regular expression" is a mouthful, so you will usually
+find the term abbreviated to "regex" or "regexp". 
 
 Imagine you are writing an application and you want to set the rules for when a
 user chooses their username. We want to allow the username to contain letters,
 numbers, underscores and hyphens. We also want to limit the number of characters
-in username so it does not look ugly. We use the following regular expression to
-validate a username:
+in the username so it does not look ugly. We can use the following regular expression to
+validate the username:
 
 

Regular expression

-Above regular expression can accept the strings `john_doe`, `jo-hn_doe` and -`john12_as`. It does not match `Jo` because that string contains uppercase +The regular expression above can accept the strings `john_doe`, `jo-hn_doe` and +`john12_as`. It does not match `Jo` because that string contains an uppercase letter and also it is too short. ## Table of Contents - [Basic Matchers](#1-basic-matchers) -- [Meta character](#2-meta-characters) - - [Full stop](#21-full-stop) - - [Character set](#22-character-set) - - [Negated character set](#221-negated-character-set) +- [Meta Characters](#2-meta-characters) + - [Full Stops](#21-full-stops) + - [Character Sets](#22-character-sets) + - [Negated Character Sets](#221-negated-character-sets) - [Repetitions](#23-repetitions) - [The Star](#231-the-star) - [The Plus](#232-the-plus) - [The Question Mark](#233-the-question-mark) - [Braces](#24-braces) - - [Character Group](#25-character-group) + - [Capturing Groups](#25-capturing-groups) + - [Non-Capturing Groups](#251-non-capturing-groups) - [Alternation](#26-alternation) - - [Escaping special character](#27-escaping-special-character) + - [Escaping Special Characters](#27-escaping-special-characters) - [Anchors](#28-anchors) - - [Caret](#281-caret) - - [Dollar](#282-dollar) + - [The Caret](#281-the-caret) + - [The Dollar Sign](#282-the-dollar-sign) - [Shorthand Character Sets](#3-shorthand-character-sets) -- [Lookaround](#4-lookaround) - - [Positive Lookahead](#41-positive-lookahead) - - [Negative Lookahead](#42-negative-lookahead) - - [Positive Lookbehind](#43-positive-lookbehind) - - [Negative Lookbehind](#44-negative-lookbehind) +- [Lookarounds](#4-lookarounds) + - [Positive Lookaheads](#41-positive-lookaheads) + - [Negative Lookaheads](#42-negative-lookaheads) + - [Positive Lookbehinds](#43-positive-lookbehinds) + - [Negative Lookbehinds](#44-negative-lookbehinds) - [Flags](#5-flags) - [Case Insensitive](#51-case-insensitive) - - [Global search](#52-global-search) + - [Global Search](#52-global-search) - [Multiline](#53-multiline) -- [Greedy vs lazy matching](#6-greedy-vs-lazy-matching) +- [Greedy vs Lazy Matching](#6-greedy-vs-lazy-matching) ## 1. Basic Matchers -A regular expression is just a pattern of characters that we use to perform +A regular expression is just a pattern of characters that we use to perform a search in a text. For example, the regular expression `the` means: the letter `t`, followed by the letter `h`, followed by the letter `e`. @@ -112,7 +113,7 @@ not match the string `the`. ## 2. Meta Characters -Meta characters are the building blocks of the regular expressions. Meta +Meta characters are the building blocks of regular expressions. Meta characters do not stand for themselves but instead are interpreted in some special way. Some meta characters have a special meaning and are written inside square brackets. The meta characters are as follows: @@ -132,9 +133,9 @@ square brackets. The meta characters are as follows: |^|Matches the beginning of the input.| |$|Matches the end of the input.| -## 2.1 Full stop +## 2.1 Full Stops -Full stop `.` is the simplest example of meta character. The meta character `.` +The full stop `.` is the simplest example of a meta character. The meta character `.` matches any single character. It will not match return or newline characters. For example, the regular expression `.ar` means: any character, followed by the letter `a`, followed by the letter `r`. @@ -145,11 +146,11 @@ letter `a`, followed by the letter `r`. [Test the regular expression](https://regex101.com/r/xc9GkU/1) -## 2.2 Character set +## 2.2 Character Sets -Character sets are also called character class. Square brackets are used to +Character sets are also called character classes. Square brackets are used to specify character sets. Use a hyphen inside a character set to specify the -characters' range. The order of the character range inside square brackets +characters' range. The order of the character range inside the square brackets doesn't matter. For example, the regular expression `[Tt]he` means: an uppercase `T` or lowercase `t`, followed by the letter `h`, followed by the letter `e`. @@ -160,7 +161,7 @@ doesn't matter. For example, the regular expression `[Tt]he` means: an uppercase [Test the regular expression](https://regex101.com/r/2ITLQ4/1) A period inside a character set, however, means a literal period. The regular -expression `ar[.]` means: a lowercase character `a`, followed by letter `r`, +expression `ar[.]` means: a lowercase character `a`, followed by the letter `r`, followed by a period `.` character.
@@ -169,7 +170,7 @@ followed by a period `.` character.
 
 [Test the regular expression](https://regex101.com/r/wL3xtE/1)
 
-### 2.2.1 Negated character set
+### 2.2.1 Negated Character Sets
 
 In general, the caret symbol represents the start of the string, but when it is
 typed after the opening square bracket it negates the character set. For
@@ -184,14 +185,14 @@ followed by the character `a`, followed by the letter `r`.
 
 ## 2.3 Repetitions
 
-Following meta characters `+`, `*` or `?` are used to specify how many times a
+The meta characters `+`, `*` or `?` are used to specify how many times a
 subpattern can occur. These meta characters act differently in different
 situations.
 
 ### 2.3.1 The Star
 
-The symbol `*` matches zero or more repetitions of the preceding matcher. The
-regular expression `a*` means: zero or more repetitions of preceding lowercase
+The `*` symbol matches zero or more repetitions of the preceding matcher. The
+regular expression `a*` means: zero or more repetitions of the preceding lowercase
 character `a`. But if it appears after a character set or class then it finds
 the repetitions of the whole character set. For example, the regular expression
 `[a-z]*` means: any number of lowercase letters in a row.
@@ -205,8 +206,8 @@ the repetitions of the whole character set. For example, the regular expression
 The `*` symbol can be used with the meta character `.` to match any string of
 characters `.*`. The `*` symbol can be used with the whitespace character `\s`
 to match a string of whitespace characters. For example, the expression
-`\s*cat\s*` means: zero or more spaces, followed by lowercase character `c`,
-followed by lowercase character `a`, followed by lowercase character `t`,
+`\s*cat\s*` means: zero or more spaces, followed by a lowercase `c`,
+followed by a lowercase `a`, followed by a lowercase `t`,
 followed by zero or more spaces.
 
 
@@ -217,10 +218,10 @@ followed by zero or more spaces.
 
 ### 2.3.2 The Plus
 
-The symbol `+` matches one or more repetitions of the preceding character. For
-example, the regular expression `c.+t` means: lowercase letter `c`, followed by
-at least one character, followed by the lowercase character `t`. It needs to be
-clarified that `t` is the last `t` in the sentence.
+The `+` symbol matches one or more repetitions of the preceding character. For
+example, the regular expression `c.+t` means: a lowercase `c`, followed by
+at least one character, followed by a lowercase `t`. It needs to be
+clarified that`t` is the last `t` in the sentence.
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -230,11 +231,10 @@ clarified that `t` is the last `t` in the sentence.
 
 ### 2.3.3 The Question Mark
 
-In regular expression the meta character `?` makes the preceding character
+In regular expressions, the meta character `?` makes the preceding character
 optional. This symbol matches zero or one instance of the preceding character.
-For example, the regular expression `[T]?he` means: Optional the uppercase
-letter `T`, followed by the lowercase character `h`, followed by the lowercase
-character `e`.
+For example, the regular expression `[T]?he` means: Optional uppercase
+`T`, followed by a lowercase `h`, followed bya lowercase `e`.
 
 
 "[T]he" => The car is parked in the garage.
@@ -250,10 +250,10 @@ character `e`.
 
 ## 2.4 Braces
 
-In regular expression braces that are also called quantifiers are used to
+In regular expressions, braces (also called quantifiers) are used to
 specify the number of times that a character or a group of characters can be
 repeated. For example, the regular expression `[0-9]{2,3}` means: Match at least
-2 digits but not more than 3 (characters in the range of 0 to 9).
+2 digits, but not more than 3, ranging from 0 to 9.
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -262,7 +262,7 @@ repeated. For example, the regular expression `[0-9]{2,3}` means: Match at least
 [Test the regular expression](https://regex101.com/r/juM86s/1)
 
 We can leave out the second number. For example, the regular expression
-`[0-9]{2,}` means: Match 2 or more digits. If we also remove the comma the
+`[0-9]{2,}` means: Match 2 or more digits. If we also remove the comma, the
 regular expression `[0-9]{3}` means: Match exactly 3 digits.
 
 
@@ -277,16 +277,16 @@ regular expression `[0-9]{3}` means: Match exactly 3 digits.
 
 [Test the regular expression](https://regex101.com/r/Sivu30/1)
 
-## 2.5 Capturing Group
+## 2.5 Capturing Groups
 
-A capturing group is a group of sub-patterns that is written inside Parentheses 
-`(...)`. Like as we discussed before that in regular expression if we put a quantifier 
-after a character then it will repeat the preceding character. But if we put quantifier
+A capturing group is a group of sub-patterns that is written inside parentheses 
+`(...)`. As discussed before, in regular expressions, if we put a quantifier 
+after a character then it will repeat the preceding character. But if we put a quantifier
 after a capturing group then it repeats the whole capturing group. For example,
 the regular expression `(ab)*` matches zero or more repetitions of the character
-"ab". We can also use the alternation `|` meta character inside capturing group.
-For example, the regular expression `(c|g|p)ar` means: lowercase character `c`,
-`g` or `p`, followed by character `a`, followed by character `r`.
+"ab". We can also use the alternation `|` meta character inside a capturing group.
+For example, the regular expression `(c|g|p)ar` means: a lowercase `c`,
+`g` or `p`, followed by `a`, followed by `r`.
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -294,15 +294,15 @@ For example, the regular expression `(c|g|p)ar` means: lowercase character `c`,
 
 [Test the regular expression](https://regex101.com/r/tUxrBG/1)
 
-Note that capturing groups do not only match but also capture the characters for use in 
-the parent language. The parent language could be python or javascript or virtually any
+Note that capturing groups do not only match, but also capture, the characters for use in 
+the parent language. The parent language could be Python or JavaScript or virtually any
 language that implements regular expressions in a function definition.
 
-### 2.5.1 Non-capturing group
+### 2.5.1 Non-Capturing Groups
 
-A non-capturing group is a capturing group that only matches the characters, but 
+A non-capturing group is a capturing group that matches the characters but 
 does not capture the group. A non-capturing group is denoted by a `?` followed by a `:` 
-within parenthesis `(...)`. For example, the regular expression `(?:c|g|p)ar` is similar to 
+within parentheses `(...)`. For example, the regular expression `(?:c|g|p)ar` is similar to 
 `(c|g|p)ar` in that it matches the same characters but will not create a capture group.
 
 
@@ -319,13 +319,13 @@ See also [4. Lookaround](#4-lookaround).
 
 In a regular expression, the vertical bar `|` is used to define alternation.
 Alternation is like an OR statement between multiple expressions. Now, you may be
-thinking that character set and alternation works the same way. But the big
-difference between character set and alternation is that character set works on
-character level but alternation works on expression level. For example, the
-regular expression `(T|t)he|car` means: either (uppercase character `T` or lowercase
-`t`, followed by lowercase character `h`, followed by lowercase character `e`) OR
-(lowercase character `c`, followed by lowercase character `a`, followed by
-lowercase character `r`). Note that I put the parentheses for clarity, to show that either expression
+thinking that character sets and alternation work the same way. But the big
+difference between character sets and alternation is that character sets work at the
+character level but alternation works at the expression level. For example, the
+regular expression `(T|t)he|car` means: either (an uppercase `T` or a lowercase
+`t`, followed by a lowercase `h`, followed by a lowercase `e`) OR
+(a lowercase `c`, followed by a lowercase `a`, followed by
+a lowercase `r`). Note that I included the parentheses for clarity, to show that either expression
 in parentheses can be met and it will match.
 
 
@@ -334,17 +334,15 @@ in parentheses can be met and it will match.
 
 [Test the regular expression](https://regex101.com/r/fBXyX0/1)
 
-## 2.7 Escaping special character
+## 2.7 Escaping Special Characters
 
-Backslash `\` is used in regular expression to escape the next character. This
-allows us to specify a symbol as a matching character including reserved
-characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching
-character prepend `\` before it.
+A backslash `\` is used in regular expressions to escape the next character. This
+allows us to include reserved characters such as `{ } [ ] / \ + * . $ ^ | ?` as matching characters. To use one of these special character as a matching character, prepend it with `\`.
 
-For example, the regular expression `.` is used to match any character except
-newline. Now to match `.` in an input string the regular expression
-`(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase
-character `a`, followed by lowercase letter `t`, followed by optional `.`
+For example, the regular expression `.` is used to match any character except a
+newline. Now, to match `.` in an input string, the regular expression
+`(f|c|m)at\.?` means: a lowercase `f`, `c` or `m`, followed by a lowercase
+`a`, followed by a lowercase `t`, followed by an optional `.`
 character.
 
 
@@ -357,20 +355,20 @@ character.
 
 In regular expressions, we use anchors to check if the matching symbol is the
 starting symbol or ending symbol of the input string. Anchors are of two types:
-First type is Caret `^` that check if the matching character is the start
-character of the input and the second type is Dollar `$` that checks if matching
+The first type is the caret `^` that check if the matching character is the first
+character of the input and the second type is the dollar sign `$` which checks if a matching
 character is the last character of the input string.
 
-### 2.8.1 Caret
+### 2.8.1 The Caret
 
-Caret `^` symbol is used to check if matching character is the first character
-of the input string. If we apply the following regular expression `^a` (if a is
-the starting symbol) to input string `abc` it matches `a`. But if we apply
-regular expression `^b` on above input string it does not match anything.
-Because in input string `abc` "b" is not the starting symbol. Let's take a look
-at another regular expression `^(T|t)he` which means: uppercase character `T` or
-lowercase character `t` is the start symbol of the input string, followed by
-lowercase character `h`, followed by lowercase character `e`.
+The caret symbol `^` is used to check if a matching character is the first character
+of the input string. If we apply the following regular expression `^a` (meaning 'a' must be
+the starting character) to the string `abc`, it will match `a`. But if we apply
+the regular expression `^b` to the above string, it will not match anything.
+Because in the string `abc`, the "b" is not the starting character. Let's take a look
+at another regular expression `^(T|t)he` which means: an uppercase `T` or
+a lowercase `t` must be the first character in the string, followed by a
+lowercase `h`, followed by a lowercase `e`.
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -384,12 +382,12 @@ lowercase character `h`, followed by lowercase character `e`.
 
 [Test the regular expression](https://regex101.com/r/jXrKne/1)
 
-### 2.8.2 Dollar
+### 2.8.2 The Dollar Sign
 
-Dollar `$` symbol is used to check if matching character is the last character
-of the input string. For example, regular expression `(at\.)$` means: a
-lowercase character `a`, followed by lowercase character `t`, followed by a `.`
-character and the matcher must be end of the string.
+The dollar sign `$` is used to check if a matching character is the last character
+in the string. For example, the regular expression `(at\.)$` means: a
+lowercase `a`, followed by a lowercase `t`, followed by a `.`
+character and the matcher must be at the end of the string.
 
 
 "(at\.)" => The fat cat. sat. on the mat.
@@ -405,30 +403,29 @@ character and the matcher must be end of the string.
 
 ##  3. Shorthand Character Sets
 
-Regular expression provides shorthands for the commonly used character sets,
-which offer convenient shorthands for commonly used regular expressions. The
-shorthand character sets are as follows:
+There are a number of convenient shorthands for commonly used character sets/
+regular expressions:
 
 |Shorthand|Description|
 |:----:|----|
 |.|Any character except new line|
 |\w|Matches alphanumeric characters: `[a-zA-Z0-9_]`|
 |\W|Matches non-alphanumeric characters: `[^\w]`|
-|\d|Matches digit: `[0-9]`|
-|\D|Matches non-digit: `[^\d]`|
-|\s|Matches whitespace character: `[\t\n\f\r\p{Z}]`|
-|\S|Matches non-whitespace character: `[^\s]`|
-
-## 4. Lookaround
-
-Lookbehind and lookahead (also called lookaround) are specific types of
-***non-capturing groups*** (used to match the pattern but not included in matching
-list). Lookarounds are used when we have the condition that this pattern is
-preceded or followed by another certain pattern. For example, we want to get all
-numbers that are preceded by `$` character from the following input string
-`$4.44 and $10.88`. We will use following regular expression `(?<=\$)[0-9\.]*`
-which means: get all the numbers which contain `.` character and  are preceded
-by `$` character. Following are the lookarounds that are used in regular
+|\d|Matches digits: `[0-9]`|
+|\D|Matches non-digits: `[^\d]`|
+|\s|Matches whitespace characters: `[\t\n\f\r\p{Z}]`|
+|\S|Matches non-whitespace characters: `[^\s]`|
+
+## 4. Lookarounds
+
+Lookbehinds and lookaheads (also called lookarounds) are specific types of
+***non-capturing groups*** (used to match a pattern but without including it in the matching
+list). Lookarounds are used when we a pattern must be
+preceded or followed by another pattern. For example, imagine we want to get all
+numbers that are preceded by the `$` character from the string
+`$4.44 and $10.88`. We will use the following regular expression `(?<=\$)[0-9\.]*`
+which means: get all the numbers which contain the `.` character and are preceded
+by the `$` character. These are the lookarounds that are used in regular
 expressions:
 
 |Symbol|Description|
@@ -438,18 +435,18 @@ expressions:
 |?<=|Positive Lookbehind|
 |?
 "(T|t)he(?=\sfat)" => The fat cat sat on the mat.
@@ -457,15 +454,14 @@ or `the` which are followed by the word `fat`.
 
 [Test the regular expression](https://regex101.com/r/IDDARt/1)
 
-### 4.2 Negative Lookahead
+### 4.2 Negative Lookaheads
 
-Negative lookahead is used when we need to get all matches from input string
-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
+Negative lookaheads are used when we need to get all matches from an input string
+that are not followed by a certain pattern. A negative lookahead is written the same way as a
+positive lookahead. The only difference is, instead of an equals sign `=`, we
+use an exclamation mark `!` to indicate negation i.e. `(?!...)`. Let's take a look at the following
 regular expression `(T|t)he(?!\sfat)` which means: get all `The` or `the` words
-from input string that are not followed by the word `fat` precedes by a space
-character.
+from the input string that are not followed by a space character and the word `fat`.
 
 
 "(T|t)he(?!\sfat)" => The fat cat sat on the mat.
@@ -473,12 +469,12 @@ character.
 
 [Test the regular expression](https://regex101.com/r/V32Npg/1)
 
-### 4.3 Positive Lookbehind
+### 4.3 Positive Lookbehinds
 
-Positive lookbehind is used to get all the matches that are preceded by a
-specific pattern. Positive lookbehind is denoted by `(?<=...)`. For example, the
+Positive lookbehinds are used to get all the matches that are preceded by a
+specific pattern. Positive lookbehinds are written `(?<=...)`. For example, the
 regular expression `(?<=(T|t)he\s)(fat|mat)` means: get all `fat` or `mat` words
-from input string that are after the word `The` or `the`.
+from the input string that come after the word `The` or `the`.
 
 
 "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -486,11 +482,11 @@ from input string that are after the word `The` or `the`.
 
 [Test the regular expression](https://regex101.com/r/avH165/1)
 
-### 4.4 Negative Lookbehind
+### 4.4 Negative Lookbehinds
 
-Negative lookbehind is used to get all the matches that are not preceded by a
-specific pattern. Negative lookbehind is denoted by `(?
@@ -507,17 +503,17 @@ integral part of the RegExp.
 
 |Flag|Description|
 |:----:|----|
-|i|Case insensitive: Sets matching to be case-insensitive.|
-|g|Global Search: Search for a pattern throughout the input string.|
-|m|Multiline: Anchor meta character works on each line.|
+|i|Case insensitive: Match will be case-insensitive.|
+|g|Global Search: Match all instances, not just the first.|
+|m|Multiline: Anchor meta characters work on each line.|
 
 ### 5.1 Case Insensitive
 
 The `i` modifier is used to perform case-insensitive matching. For example, the
-regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase
-character `h`, followed by character `e`. And at the end of regular expression
+regular expression `/The/gi` means: an uppercase `T`, followed by a lowercase
+`h`, followed by an `e`. And at the end of regular expression
 the `i` flag tells the regular expression engine to ignore the case. As you can
-see we also provided `g` flag because we want to search for the pattern in the
+see, we also provided `g` flag because we want to search for the pattern in the
 whole input string.
 
 
@@ -532,13 +528,13 @@ whole input string.
 
 [Test the regular expression](https://regex101.com/r/ahfiuh/1)
 
-### 5.2 Global search
+### 5.2 Global Search
 
-The `g` modifier is used to perform a global match (find all matches rather than
+The `g` modifier is used to perform a global match (finds all matches rather than
 stopping after the first match). For example, the regular expression`/.(at)/g`
-means: any character except new line, followed by lowercase character `a`,
-followed by lowercase character `t`. Because we provided `g` flag at the end of
-the regular expression now it will find all matches in the input string, not just the first one (which is the default behavior).
+means: any character except a new line, followed by a lowercase `a`,
+followed by a lowercase `t`. Because we provided the `g` flag at the end of
+the regular expression, it will now find all matches in the input string, not just the first one (which is the default behavior).
 
 
 "/.(at)/" => The fat cat sat on the mat.
@@ -554,12 +550,12 @@ the regular expression now it will find all matches in the input string, not jus
 
 ### 5.3 Multiline
 
-The `m` modifier is used to perform a multi-line match. As we discussed earlier
-anchors `(^, $)` are used to check if pattern is the beginning of the input or
-end of the input string. But if we want that anchors works on each line we use
-`m` flag. For example, the regular expression `/at(.)?$/gm` means: lowercase
-character `a`, followed by lowercase character `t`, optionally anything except
-new line. And because of `m` flag now regular expression engine matches pattern
+The `m` modifier is used to perform a multi-line match. As we discussed earlier,
+anchors `(^, $)` are used to check if a pattern is at the beginning of the input or
+the end. But if we want the anchors to work on each line, we use
+the `m` flag. For example, the regular expression `/at(.)?$/gm` means: a lowercase
+`a`, followed by a lowercase `t` and, optionally, anything except
+a new line. And because of the `m` flag, the regular expression engine now matches patterns
 at the end of each line in a string.
 
 
@@ -578,9 +574,9 @@ at the end of each line in a string.
 
 [Test the regular expression](https://regex101.com/r/E88WE2/1)
 
-## 6. Greedy vs lazy matching
-By default regex will do greedy matching which means it will match as long as
-possible. We can use `?` to match in lazy way which means as short as possible.
+## 6. Greedy vs Lazy Matching
+By default, a regex will perform a greedy match, which means the match will be as long as
+possible. We can use `?` to match in a lazy way, which means the match should be as short as possible.
 
 
 "/(.*at)/" => The fat cat sat on the mat. 
@@ -597,7 +593,7 @@ possible. We can use `?` to match in lazy way which means as short as possible. ## Contribution -* Open pull request with improvements +* Open a pull request with improvements * Discuss ideas in issues * Spread the word * Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) From 060cf5c5143552aa00fcd79e844e4cc3638bb103 Mon Sep 17 00:00:00 2001 From: Tom McAndrew <42588609+tommcandrew@users.noreply.github.com> Date: Tue, 10 Mar 2020 17:13:25 +0000 Subject: [PATCH 090/156] Correct grammar in intro title --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d534fbe..055550bf 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ * [Tiếng Việt](translations/README-vn.md) * [فارسی](translations/README-fa.md) -## What is Regular Expression? +## What are Regular Expressions? > A regular expression is a group of characters or symbols which is used to find a specific pattern in a text. From 41e1eefca7c196f9265cacbca59480bad021ac89 Mon Sep 17 00:00:00 2001 From: Tom McAndrew <42588609+tommcandrew@users.noreply.github.com> Date: Tue, 10 Mar 2020 17:14:48 +0000 Subject: [PATCH 091/156] Make section 2.1 title singular --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 055550bf..75d06393 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ letter and also it is too short. - [Basic Matchers](#1-basic-matchers) - [Meta Characters](#2-meta-characters) - - [Full Stops](#21-full-stops) + - [The Full Stop](#21-the-full-stops) - [Character Sets](#22-character-sets) - [Negated Character Sets](#221-negated-character-sets) - [Repetitions](#23-repetitions) @@ -133,7 +133,7 @@ square brackets. The meta characters are as follows: |^|Matches the beginning of the input.| |$|Matches the end of the input.| -## 2.1 Full Stops +## 2.1 The Full Stop The full stop `.` is the simplest example of a meta character. The meta character `.` matches any single character. It will not match return or newline characters. From f7e4c53376f90651a656bbbd098aada82d064fe7 Mon Sep 17 00:00:00 2001 From: Tom McAndrew <42588609+tommcandrew@users.noreply.github.com> Date: Tue, 10 Mar 2020 17:17:18 +0000 Subject: [PATCH 092/156] Make section 4 titles singular --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 75d06393..4ac6e0f9 100644 --- a/README.md +++ b/README.md @@ -77,10 +77,10 @@ letter and also it is too short. - [The Dollar Sign](#282-the-dollar-sign) - [Shorthand Character Sets](#3-shorthand-character-sets) - [Lookarounds](#4-lookarounds) - - [Positive Lookaheads](#41-positive-lookaheads) - - [Negative Lookaheads](#42-negative-lookaheads) - - [Positive Lookbehinds](#43-positive-lookbehinds) - - [Negative Lookbehinds](#44-negative-lookbehinds) + - [Positive Lookahead](#41-positive-lookahead) + - [Negative Lookahead](#42-negative-lookahead) + - [Positive Lookbehind](#43-positive-lookbehind) + - [Negative Lookbehind](#44-negative-lookbehind) - [Flags](#5-flags) - [Case Insensitive](#51-case-insensitive) - [Global Search](#52-global-search) @@ -435,7 +435,7 @@ expressions: |?<=|Positive Lookbehind| |? Date: Wed, 18 Mar 2020 18:06:14 +0900 Subject: [PATCH 093/156] Update README-ko.md --- translations/README-ko.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index d4c9c0bb..6d294956 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -77,7 +77,7 @@ - [대소문자 구분없음](#51-대소문자-구분없음) - [전체 검색](#52-전체-검색) - [멀티 라인](#53-멀티-라인) -- [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른 매칭) +- [탐욕적 vs 게으른 매칭](#6-탐욕적-vs-게으른-매칭) ## 1. 기본 매쳐 From 26a9e2d94e4cae467884bbe14455d110ae981d79 Mon Sep 17 00:00:00 2001 From: Bueltge Date: Thu, 19 Mar 2020 14:54:57 +0100 Subject: [PATCH 094/156] Update my current status --- translations/README-de.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index ff2ebd4a..bbb2c4d6 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -95,23 +95,23 @@ Sonderzeichen sind Bausteine von regulären Ausdrücken. Sonderzeichen stehen ni |Sonderzeichen|Beschreibung| |:----:|----| -|.|Period matches any single character except a line break.| -|[ ]|Character class. Matches any character contained between the square brackets.| -|[^ ]|Negated character class. Matches any character that is not contained between the square brackets| -|*|Matches 0 or more repetitions of the preceding symbol.| -|+|Matches 1 or more repetitions of the preceding symbol.| -|?|Makes the preceding symbol optional.| -|{n,m}|Braces. Matches at least "n" but not more than "m" repetitions of the preceding symbol.| -|(xyz)|Character group. Matches the characters xyz in that exact order.| -|||Alternation. Matches either the characters before or the characters after the symbol.| -|\|Escapes the next character. This allows you to match reserved characters [ ] ( ) { } . * + ? ^ $ \ || -|^|Matches the beginning of the input.| -|$|Matches the end of the input.| - -## 2.1 Full stop - -Full stop `.` is the simplest example of meta character. The meta character `.` -matches any single character. It will not match return or newline characters. +|.|Der Punkt entspricht jedem einzelnen Zeichen, außer einem Zeilenumbruch.| +|[ ]|Zeichen-Klasse, entspricht jedem Zeichen innerhalb der eckigen Klammern.| +|[^ ]|Negierte Zeichen-Klasse, entspricht jedem Zeichen welches nicht innerhalb der eckigen Klammern definiert ist.| +|*|Entspricht 0 oder mehr Wiederholungen der voran gestellten Zeichen.| +|+|Entspricht 1 oder mehr Wiederholungen der voran gestellten Zeichen.| +|?|Macht das vorhergehende Zeichen optional.| +|{n,m}|Klammern, entspricht mindestens "n", aber nicht mehr als "m" Wiederholungen des Zeichens.| +|(xyz)|Zeichengruppe, entspricht den Zeichen xyz in der exakten Reihenfolge.| +|||Alternation, entspricht entweder den Zeichen vor oder nach dem Sonderzeichen \|.| +|\|Entfernt das nachfolgende Zeichen. Dies ermöglicht es Zeichen zu blockieren [ ] ( ) { } . * + ? ^ $ \ || +|^|Überprüft den Anfang einer Eingabe.| +|$|Überprüft das Ende einer Eingabe.| + +## 2.1 Punkt + +Der Punkt `.` ist die einfachste Möglichkeit von Sonderzeichen. Das Sonderzeichen `.` + entspricht jedem einzelnen Zeichen. It will not match return or newline characters. For example, the regular expression `.ar` means: any character, followed by the letter `a`, followed by the letter `r`. From ceb3d3bd74601f72d381fa9c993eae2157dc8cbc Mon Sep 17 00:00:00 2001 From: cuiyaocy Date: Wed, 1 Apr 2020 09:29:09 +0800 Subject: [PATCH 095/156] modify the desc of {n,m} --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 55984ea1..6ff3f4fd 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -119,7 +119,7 @@ |*|匹配>=0个重复的在*号之前的字符。| |+|匹配>=1个重复的+号前的字符。 |?|标记?之前的字符为可选.| -|{n,m}|匹配num个大括号之间的字符 (n <= num <= m).| +|{n,m}|匹配num个大括号之前的字符或字符集 (n <= num <= m).| |(xyz)|字符集,匹配与 xyz 完全相等的字符串.| |||或运算符,匹配符号前或后的字符.| |\|转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ || From b617729b2575ab3a30a2d01cac3697620cab1ac3 Mon Sep 17 00:00:00 2001 From: Frank Bueltge Date: Mon, 20 Apr 2020 15:26:55 +0200 Subject: [PATCH 096/156] Update chanpte 2 --- translations/README-de.md | 112 ++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 60 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index bbb2c4d6..b8b09465 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -46,7 +46,7 @@ Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, ` - [Basis Vergleiche](#1-basic-matchers) - [Sonderzeichen](#2-meta-characters) - [Punkt](#21-full-stop) - - [Character set](#22-character-set) + - [Zeichensätze](#22-zeichensaetze) - [Invertierter Zeichensatz](#221-negated-character-set) - [Wiederholungen](#23-repetitions) - [Stern *](#231-the-star) @@ -111,29 +111,21 @@ Sonderzeichen sind Bausteine von regulären Ausdrücken. Sonderzeichen stehen ni ## 2.1 Punkt Der Punkt `.` ist die einfachste Möglichkeit von Sonderzeichen. Das Sonderzeichen `.` - entspricht jedem einzelnen Zeichen. It will not match return or newline characters. -For example, the regular expression `.ar` means: any character, followed by the -letter `a`, followed by the letter `r`. + entspricht jedem einzelnen Zeichen. Es wird kein Zeilenumbruch oder Enter-Zeichen gefunden. Als Beispiel, der reguläre Ausdruck `.ar` bedeutet: ein beliebiges Zeichen, gefolgt von dem Buchstaben `a`, gefolgt vom Buchstaben `r`.
 ".ar" => The car parked in the garage.
 
+[Teste den regulären Ausdruck](https://regex101.com/r/xc9GkU/1) -[Test the regular expression](https://regex101.com/r/xc9GkU/1) +## 2.2 Zeichensätze -## 2.2 Character set - -Character sets are also called character class. Square brackets are used to -specify character sets. Use a hyphen inside a character set to specify the -characters' range. The order of the character range inside square brackets -doesn't matter. For example, the regular expression `[Tt]he` means: an uppercase -`T` or lowercase `t`, followed by the letter `h`, followed by the letter `e`. +Zeichensätze werden auch als Zeichenklasse bezeichnet. Zeichensätze werden in eckige Klammern angegeben. Um den Bereich der Zeichen anzugeben ist ein Bindestrich zu verwenden. Die Reihenfolge des Bereiches in den eckigen Klammern spielt keine Rolle. Zum Beispiel bedeutet der reguläre Ausdruck `[Tt]he`: ein groß geschriebenes `T` oder ein kleingeschriebenes `t`, gefolgt vom Buchstaben `h` und weiter gefolgt vom Buchstaben `e`.
 "[Tt]he" => The car parked in the garage.
 
- -[Test the regular expression](https://regex101.com/r/2ITLQ4/1) +[Teste den regulären Ausdruck](https://regex101.com/r/2ITLQ4/1) A period inside a character set, however, means a literal period. The regular expression `ar[.]` means: a lowercase character `a`, followed by letter `r`, @@ -143,20 +135,20 @@ followed by a period `.` character. "ar[.]" => A garage is a good place to park a car.
-[Test the regular expression](https://regex101.com/r/wL3xtE/1) +[Teste den regulären Ausdruck](https://regex101.com/r/wL3xtE/1) ### 2.2.1 Negated character set In general, the caret symbol represents the start of the string, but when it is typed after the opening square bracket it negates the character set. For -example, the regular expression `[^c]ar` means: any character except `c`, +example, der reguläre Ausdruck `[^c]ar` means: any character except `c`, followed by the character `a`, followed by the letter `r`.
 "[^c]ar" => The car parked in the garage.
 
-[Test the regular expression](https://regex101.com/r/nNNlq3/1) +[Teste den regulären Ausdruck](https://regex101.com/r/nNNlq3/1) ## 2.3 Repetitions @@ -169,14 +161,14 @@ situations. The symbol `*` matches zero or more repetitions of the preceding matcher. The regular expression `a*` means: zero or more repetitions of preceding lowercase character `a`. But if it appears after a character set or class then it finds -the repetitions of the whole character set. For example, the regular expression +the repetitions of the whole character set. For example, der reguläre Ausdruck `[a-z]*` means: any number of lowercase letters in a row.
 "[a-z]*" => The car parked in the garage #21.
 
-[Test the regular expression](https://regex101.com/r/7m8me5/1) +[Teste den regulären Ausdruck](https://regex101.com/r/7m8me5/1) The `*` symbol can be used with the meta character `.` to match any string of characters `.*`. The `*` symbol can be used with the whitespace character `\s` @@ -189,12 +181,12 @@ followed by zero or more spaces. "\s*cat\s*" => The fat cat sat on the concatenation.
-[Test the regular expression](https://regex101.com/r/gGrwuz/1) +[Teste den regulären Ausdruck](https://regex101.com/r/gGrwuz/1) ### 2.3.2 The Plus The symbol `+` matches one or more repetitions of the preceding character. For -example, the regular expression `c.+t` means: lowercase letter `c`, followed by +example, der reguläre Ausdruck `c.+t` means: lowercase letter `c`, followed by at least one character, followed by the lowercase character `t`. It needs to be clarified that `t` is the last `t` in the sentence. @@ -202,13 +194,13 @@ clarified that `t` is the last `t` in the sentence. "c.+t" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/Dzf9Aa/1) +[Teste den regulären Ausdruck](https://regex101.com/r/Dzf9Aa/1) ### 2.3.3 The Question Mark In regular expression the meta character `?` makes the preceding character optional. This symbol matches zero or one instance of the preceding character. -For example, the regular expression `[T]?he` means: Optional the uppercase +For example, der reguläre Ausdruck `[T]?he` means: Optional the uppercase letter `T`, followed by the lowercase character `h`, followed by the lowercase character `e`. @@ -216,28 +208,28 @@ character `e`. "[T]he" => The car is parked in the garage.
-[Test the regular expression](https://regex101.com/r/cIg9zm/1) +[Teste den regulären Ausdruck](https://regex101.com/r/cIg9zm/1)
 "[T]?he" => The car is parked in the garage.
 
-[Test the regular expression](https://regex101.com/r/kPpO2x/1) +[Teste den regulären Ausdruck](https://regex101.com/r/kPpO2x/1) ## 2.4 Braces In regular expression braces that are also called quantifiers are used to specify the number of times that a character or a group of characters can be -repeated. For example, the regular expression `[0-9]{2,3}` means: Match at least +repeated. For example, der reguläre Ausdruck `[0-9]{2,3}` means: Match at least 2 digits but not more than 3 ( characters in the range of 0 to 9).
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
 
-[Test the regular expression](https://regex101.com/r/juM86s/1) +[Teste den regulären Ausdruck](https://regex101.com/r/juM86s/1) -We can leave out the second number. For example, the regular expression +We can leave out the second number. For example, der reguläre Ausdruck `[0-9]{2,}` means: Match 2 or more digits. If we also remove the comma the regular expression `[0-9]{3}` means: Match exactly 3 digits. @@ -245,13 +237,13 @@ regular expression `[0-9]{3}` means: Match exactly 3 digits. "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
-[Test the regular expression](https://regex101.com/r/Gdy4w5/1) +[Teste den regulären Ausdruck](https://regex101.com/r/Gdy4w5/1)
 "[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
 
-[Test the regular expression](https://regex101.com/r/Sivu30/1) +[Teste den regulären Ausdruck](https://regex101.com/r/Sivu30/1) ## 2.5 Capturing Group @@ -259,16 +251,16 @@ A capturing group is a group of sub-patterns that is written inside Parentheses `(...)`. Like as we discussed before that in regular expression if we put a quantifier after a character then it will repeat the preceding character. But if we put quantifier after a capturing group then it repeats the whole capturing group. For example, -the regular expression `(ab)*` matches zero or more repetitions of the character +der reguläre Ausdruck `(ab)*` matches zero or more repetitions of the character "ab". We can also use the alternation `|` meta character inside capturing group. -For example, the regular expression `(c|g|p)ar` means: lowercase character `c`, +For example, der reguläre Ausdruck `(c|g|p)ar` means: lowercase character `c`, `g` or `p`, followed by character `a`, followed by character `r`.
 "(c|g|p)ar" => The car is parked in the garage.
 
-[Test the regular expression](https://regex101.com/r/tUxrBG/1) +[Teste den regulären Ausdruck](https://regex101.com/r/tUxrBG/1) Note that capturing groups do not only match but also capture the characters for use in the parent language. The parent language could be python or javascript or virtually any @@ -278,14 +270,14 @@ language that implements regular expressions in a function definition. A non-capturing group is a capturing group that only matches the characters, but does not capture the group. A non-capturing group is denoted by a `?` followed by a `:` -within parenthesis `(...)`. For example, the regular expression `(?:c|g|p)ar` is similar to +within parenthesis `(...)`. For example, der reguläre Ausdruck `(?:c|g|p)ar` is similar to `(c|g|p)ar` in that it matches the same characters but will not create a capture group.
 "(?:c|g|p)ar" => The car is parked in the garage.
 
-[Test the regular expression](https://regex101.com/r/Rm7Me8/1) +[Teste den regulären Ausdruck](https://regex101.com/r/Rm7Me8/1) Non-capturing groups can come in handy when used in find-and-replace functionality or when mixed with capturing groups to keep the overview when producing any other kind of output. @@ -308,7 +300,7 @@ in parentheses can be met and it will match. "(T|t)he|car" => The car is parked in the garage.
-[Test the regular expression](https://regex101.com/r/fBXyX0/1) +[Teste den regulären Ausdruck](https://regex101.com/r/fBXyX0/1) ## 2.7 Escaping special character @@ -317,8 +309,8 @@ allows us to specify a symbol as a matching character including reserved characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching character prepend `\` before it. -For example, the regular expression `.` is used to match any character except -newline. Now to match `.` in an input string the regular expression +For example, der reguläre Ausdruck `.` is used to match any character except +newline. Now to match `.` in an input string der reguläre Ausdruck `(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase character `a`, followed by lowercase letter `t`, followed by optional `.` character. @@ -327,7 +319,7 @@ character. "(f|c|m)at\.?" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/DOc5Nu/1) +[Teste den regulären Ausdruck](https://regex101.com/r/DOc5Nu/1) ## 2.8 Anchors @@ -352,13 +344,13 @@ lowercase character `h`, followed by lowercase character `e`. "(T|t)he" => The car is parked in the garage.
-[Test the regular expression](https://regex101.com/r/5ljjgB/1) +[Teste den regulären Ausdruck](https://regex101.com/r/5ljjgB/1)
 "^(T|t)he" => The car is parked in the garage.
 
-[Test the regular expression](https://regex101.com/r/jXrKne/1) +[Teste den regulären Ausdruck](https://regex101.com/r/jXrKne/1) ### 2.8.2 Dollar @@ -371,13 +363,13 @@ character and the matcher must be end of the string. "(at\.)" => The fat cat. sat. on the mat.
-[Test the regular expression](https://regex101.com/r/y4Au4D/1) +[Teste den regulären Ausdruck](https://regex101.com/r/y4Au4D/1)
 "(at\.)$" => The fat cat. sat. on the mat.
 
-[Test the regular expression](https://regex101.com/r/t0AkOd/1) +[Teste den regulären Ausdruck](https://regex101.com/r/t0AkOd/1) ## 3. Shorthand Character Sets @@ -421,7 +413,7 @@ followed by the lookahead expression. The returned match only contains the text that is matched by the first part of the expression. To define a positive lookahead, parentheses are used. Within those parentheses, a question mark with equal sign is used like this: `(?=...)`. Lookahead expression is written after -the equal sign inside parentheses. For example, the regular expression +the equal sign inside parentheses. For example, der reguläre Ausdruck `(T|t)he(?=\sfat)` means: optionally match lowercase letter `t` or uppercase letter `T`, followed by letter `h`, followed by letter `e`. In parentheses we define positive lookahead which tells regular expression engine to match `The` @@ -431,7 +423,7 @@ or `the` which are followed by the word `fat`. "(T|t)he(?=\sfat)" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/IDDARt/1) +[Teste den regulären Ausdruck](https://regex101.com/r/IDDARt/1) ### 4.2 Negative Lookahead @@ -447,7 +439,7 @@ character. "(T|t)he(?!\sfat)" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/V32Npg/1) +[Teste den regulären Ausdruck](https://regex101.com/r/V32Npg/1) ### 4.3 Positive Lookbehind @@ -460,7 +452,7 @@ from input string that are after the word `The` or `the`. "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/avH165/1) +[Teste den regulären Ausdruck](https://regex101.com/r/avH165/1) ### 4.4 Negative Lookbehind @@ -473,7 +465,7 @@ string that are not after the word `The` or `the`. "(?<!(T|t)he\s)(cat)" => The cat sat on cat.
-[Test the regular expression](https://regex101.com/r/8Efx5G/1) +[Teste den regulären Ausdruck](https://regex101.com/r/8Efx5G/1) ## 5. Flags @@ -492,7 +484,7 @@ integral part of the RegExp. The `i` modifier is used to perform case-insensitive matching. For example, the regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase character `h`, followed by character `e`. And at the end of regular expression -the `i` flag tells the regular expression engine to ignore the case. As you can +the `i` flag tells der reguläre Ausdruck engine to ignore the case. As you can see we also provided `g` flag because we want to search for the pattern in the whole input string. @@ -500,40 +492,40 @@ whole input string. "The" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/dpQyf9/1) +[Teste den regulären Ausdruck](https://regex101.com/r/dpQyf9/1)
 "/The/gi" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/ahfiuh/1) +[Teste den regulären Ausdruck](https://regex101.com/r/ahfiuh/1) ### 5.2 Global search The `g` modifier is used to perform a global match (find all matches rather than -stopping after the first match). For example, the regular expression`/.(at)/g` +stopping after the first match). For example, der reguläre Ausdruck`/.(at)/g` means: any character except new line, followed by lowercase character `a`, followed by lowercase character `t`. Because we provided `g` flag at the end of -the regular expression now it will find all matches in the input string, not just the first one (which is the default behavior). +der reguläre Ausdruck now it will find all matches in the input string, not just the first one (which is the default behavior).
 "/.(at)/" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/jnk6gM/1) +[Teste den regulären Ausdruck](https://regex101.com/r/jnk6gM/1)
 "/.(at)/g" => The fat cat sat on the mat.
 
-[Test the regular expression](https://regex101.com/r/dO1nef/1) +[Teste den regulären Ausdruck](https://regex101.com/r/dO1nef/1) ### 5.3 Multiline The `m` modifier is used to perform a multi-line match. As we discussed earlier anchors `(^, $)` are used to check if pattern is the beginning of the input or end of the input string. But if we want that anchors works on each line we use -`m` flag. For example, the regular expression `/at(.)?$/gm` means: lowercase +`m` flag. For example, der reguläre Ausdruck `/at(.)?$/gm` means: lowercase character `a`, followed by lowercase character `t`, optionally anything except new line. And because of `m` flag now regular expression engine matches pattern at the end of each line in a string. @@ -544,7 +536,7 @@ at the end of each line in a string. on the mat.
-[Test the regular expression](https://regex101.com/r/hoGMkP/1) +[Teste den regulären Ausdruck](https://regex101.com/r/hoGMkP/1)
 "/.at(.)?$/gm" => The fat
@@ -552,7 +544,7 @@ at the end of each line in a string.
                   on the mat.
 
-[Test the regular expression](https://regex101.com/r/E88WE2/1) +[Teste den regulären Ausdruck](https://regex101.com/r/E88WE2/1) ## 6. Greedy vs lazy matching By default regex will do greedy matching , means it will match as long as @@ -562,13 +554,13 @@ possible. we can use `?` to match in lazy way means as short as possible "/(.*at)/" => The fat cat sat on the mat.
-[Test the regular expression](https://regex101.com/r/AyAdgJ/1) +[Teste den regulären Ausdruck](https://regex101.com/r/AyAdgJ/1)
 "/(.*?at)/" => The fat cat sat on the mat. 
-[Test the regular expression](https://regex101.com/r/AyAdgJ/2) +[Teste den regulären Ausdruck](https://regex101.com/r/AyAdgJ/2) ## Contribution From fc63d63974e9b6698b74553969e27a8df2c9faf5 Mon Sep 17 00:00:00 2001 From: Frank Bueltge Date: Mon, 20 Apr 2020 15:32:12 +0200 Subject: [PATCH 097/156] Update anker links --- translations/README-de.md | 48 +++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index b8b09465..586dccdc 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -43,33 +43,33 @@ Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, ` ## Table of Contents -- [Basis Vergleiche](#1-basic-matchers) -- [Sonderzeichen](#2-meta-characters) - - [Punkt](#21-full-stop) - - [Zeichensätze](#22-zeichensaetze) - - [Invertierter Zeichensatz](#221-negated-character-set) - - [Wiederholungen](#23-repetitions) - - [Stern *](#231-the-star) - - [Plus +](#232-the-plus) - - [Fragezeichen ?](#233-the-question-mark) - - [Klammern {}](#24-braces) - - [Zeichengruppen](#25-character-group) +- [Basis Vergleiche](#1-basis-vergleiche) +- [Sonderzeichen](#2-sonderzeichen) + - [Punkt](#21-punkt) + - [Zeichensätze](#22-zeichensätze) + - [Invertierter Zeichensatz](#221-invertierter-zeichensatz) + - [Wiederholungen](#23-wiederholungen) + - [Stern *](#231-stern) + - [Plus +](#232-plus) + - [Fragezeichen ?](#233-fragezeichen) + - [Klammern {}](#24-klammern) + - [Zeichengruppen](#25-zeichengruppen) - [Alternation |](#26-alternation) - - [Auswertung von Sonderzeichen](#27-escaping-special-character) - - [Anker](#28-anchors) + - [Auswertung von Sonderzeichen](#27-auswertung-von-sonderzeichen) + - [Anker](#28-anker) - [Caret ^](#281-caret) - [Dollar $](#282-dollar) -- [Kurzschreibweisen](#3-shorthand-character-sets) -- [Umschauen](#4-lookaround) - - [Positives Vorrausschauen](#41-positive-lookahead) - - [Negatives Vorrausschauen](#42-negative-lookahead) - - [Positives Zurückschauen](#43-positive-lookbehind) - - [Negatives Zurückschauen](#44-negative-lookbehind) -- [Steuerparameter](#5-flags) - - [Groß-/Kleinschreibung](#51-case-insensitive) - - [Globale Suche](#52-global-search) - - [Mehrzeilig](#53-multiline) -- [Gierige oder faule Übereinstimmung](#6-greedy-vs-lazy-matching) +- [Kurzschreibweisen](#3-kurzschreibweisen) +- [Umschauen](#4-umschauen) + - [Positives Vorrausschauen](#41-positives-vorausschauen) + - [Negatives Vorrausschauen](#42-negatives-vorausschauen) + - [Positives Zurückschauen](#43-positives-zurückschauen) + - [Negatives Zurückschauen](#44-negatives-zurückschauen) +- [Steuerparameter](#5-steuerparameter) + - [Groß-/Kleinschreibung](#51-groß-kleinschreibung) + - [Globale Suche](#52-globale-suche) + - [Mehrzeilig](#53-mehrzeilig) +- [Gierige oder faule Übereinstimmung](#6-gierige-oder-faule-übereinstimmung) ## 1. Basis Vergleiche From b351c28cd855a0b771069b30bfdb7ab1215a6371 Mon Sep 17 00:00:00 2001 From: Frank Bueltge Date: Mon, 20 Apr 2020 15:46:14 +0200 Subject: [PATCH 098/156] chanpter 2.2 done --- translations/README-de.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 586dccdc..0533c61e 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -127,9 +127,7 @@ Zeichensätze werden auch als Zeichenklasse bezeichnet. Zeichensätze werden in
[Teste den regulären Ausdruck](https://regex101.com/r/2ITLQ4/1) -A period inside a character set, however, means a literal period. The regular -expression `ar[.]` means: a lowercase character `a`, followed by letter `r`, -followed by a period `.` character. +Ein Punkt in einem Zeichensatz bedeutet jedoch einen wörtlichen Punkt. Der reguläre Ausdruck `ar[.]` bedeutet: ein kleingeschriebenes Zeichen `a`, gefolgt vom kleingeschriebenen Buchstaben `r`, gefolgt von dem wörtlichen Zeichen Punkt `.`.
 "ar[.]" => A garage is a good place to park a car.
@@ -137,12 +135,9 @@ followed by a period `.` character.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/wL3xtE/1)
 
-### 2.2.1 Negated character set
+### 2.2.1 Invertierter Zeichensatz
 
-In general, the caret symbol represents the start of the string, but when it is
-typed after the opening square bracket it negates the character set. For
-example, der reguläre Ausdruck `[^c]ar` means: any character except `c`,
-followed by the character `a`, followed by the letter `r`.
+Im Allgemeinen stellt das Caret-Symbol `^` den Anfang einer Zeichenkette dar. Wenn es aber nach der öffnenden eckigen Klammer gesetzt wird, dann wird der Zeichensatz negiert. Als Beispiel, der reguläre Ausdruck `[^c]ar` bedeutet: jeder Buchstabe außer `c`, gefolgt vom Buchstaben `a`, gefolgt vom Buchstaben `r`. 
 
 
 "[^c]ar" => The car parked in the garage.

From 4fc2c9ed700e10dfd4bcc9acd04fc91aa17df53c Mon Sep 17 00:00:00 2001
From: JohnnyJayJay 
Date: Wed, 24 Jun 2020 22:36:42 +0200
Subject: [PATCH 099/156] Improve grammar and wording of previous sections,
 begin working on missing sections

---
 translations/README-de.md | 81 ++++++++++++++++++---------------------
 1 file changed, 37 insertions(+), 44 deletions(-)

diff --git a/translations/README-de.md b/translations/README-de.md
index 0533c61e..1de27b6f 100644
--- a/translations/README-de.md
+++ b/translations/README-de.md
@@ -71,9 +71,9 @@ Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, `
   - [Mehrzeilig](#53-mehrzeilig)
 - [Gierige oder faule Übereinstimmung](#6-gierige-oder-faule-übereinstimmung)
 
-## 1. Basis Vergleiche
+## 1. Einfache Muster
 
-Ein regulärer Ausdruck ist ein einfaches Muster von Zeichen, welches für eine Suche in Text genutzt wird. Zum Beispiel, der reguläre Ausdruck `the` meint: der Buchstabe `t`, gefolgt durch den Buchstaben `h`, gefolgt durch den Buchstaben `e`.
+Ein regulärer Ausdruck ist einfach nur ein Muster von Zeichen, welches für eine Suche in Text genutzt wird. Der reguläre Ausdruck `the` heißt zum Beispiel: der Buchstabe `t`, gefolgt von dem Buchstaben `h`, gefolgt von dem Buchstaben `e`.
 
 
 "the" => The fat cat sat on the mat.
@@ -81,7 +81,7 @@ Ein regulärer Ausdruck ist ein einfaches Muster von Zeichen, welches für eine
 
 [Teste den regulären Ausdruck](https://regex101.com/r/dmRygT/1)
 
-Der reguläre Ausdruck `123` entspricht der Zeichenkette `123`. Dieser reguläre Ausdruck kann mit einer Zeichenkette verglichen werden, in dem jedes Zeichen in dem regulären Ausdruck nacheinander verglichen wird. Reguläre Ausdrücke sind normalerweise case sensitiv, Beachtung von Groß-/Kleinschreibung, so dass der Ausdruck `The` nicht mit der Zeichenkette  `the` überein stimmen würde. 
+Der reguläre Ausdruck `123` entspricht der Zeichenkette `123`. Dieser reguläre Ausdruck wird auf Übereinstimmung mit einer Zeichenkette überprüft, indem jedes Zeichen in dem regulären Ausdruck nacheinander mit den Zeichen in der Zeichenkette verglichen wird. Reguläre Ausdrücke sind normalerweise case sensitiv, Beachtung von Groß-/Kleinschreibung, sodass der Ausdruck `The` nicht mit der Zeichenkette  `the` überein stimmen würde. 
 
 
 "The" => The fat cat sat on the mat.
@@ -118,16 +118,16 @@ Der Punkt `.` ist die einfachste Möglichkeit von Sonderzeichen. Das Sonderzeich
 
[Teste den regulären Ausdruck](https://regex101.com/r/xc9GkU/1) -## 2.2 Zeichensätze +## 2.2 Zeichenklasse -Zeichensätze werden auch als Zeichenklasse bezeichnet. Zeichensätze werden in eckige Klammern angegeben. Um den Bereich der Zeichen anzugeben ist ein Bindestrich zu verwenden. Die Reihenfolge des Bereiches in den eckigen Klammern spielt keine Rolle. Zum Beispiel bedeutet der reguläre Ausdruck `[Tt]he`: ein groß geschriebenes `T` oder ein kleingeschriebenes `t`, gefolgt vom Buchstaben `h` und weiter gefolgt vom Buchstaben `e`. +Zeichenklassen werden auch als Zeichenmengen oder -sätze bezeichnet. Sie werden in eckige Klammern definiert. Um eine Zeichenfolge wie `A-Z` oder `0-9` zu definieren, kann ein Bindestrich `-` verwendet werden. Die Reihenfolge sonstiger Zeichen innerhalb der eckigen Klammern spielt keine Rolle. Zum Beispiel bedeutet der reguläre Ausdruck `[Tt]he`: ein groß geschriebenes `T` oder ein kleingeschriebenes `t`, gefolgt vom Buchstaben `h` und weiter gefolgt vom Buchstaben `e`.
 "[Tt]he" => The car parked in the garage.
 
[Teste den regulären Ausdruck](https://regex101.com/r/2ITLQ4/1) -Ein Punkt in einem Zeichensatz bedeutet jedoch einen wörtlichen Punkt. Der reguläre Ausdruck `ar[.]` bedeutet: ein kleingeschriebenes Zeichen `a`, gefolgt vom kleingeschriebenen Buchstaben `r`, gefolgt von dem wörtlichen Zeichen Punkt `.`. +Ein Punkt in einer Zeichenklasse bedeutet, anders als sonst, einen wörtlichen Punkt. Der reguläre Ausdruck `ar[.]` bedeutet: ein kleingeschriebenes Zeichen `a`, gefolgt vom kleingeschriebenen Buchstaben `r`, gefolgt von einem Punkt-Zeichen `.`.
 "ar[.]" => A garage is a good place to park a car.
@@ -135,9 +135,9 @@ Ein Punkt in einem Zeichensatz bedeutet jedoch einen wörtlichen Punkt. Der regu
 
 [Teste den regulären Ausdruck](https://regex101.com/r/wL3xtE/1)
 
-### 2.2.1 Invertierter Zeichensatz
+### 2.2.1 Negierte Zeichenklasse
 
-Im Allgemeinen stellt das Caret-Symbol `^` den Anfang einer Zeichenkette dar. Wenn es aber nach der öffnenden eckigen Klammer gesetzt wird, dann wird der Zeichensatz negiert. Als Beispiel, der reguläre Ausdruck `[^c]ar` bedeutet: jeder Buchstabe außer `c`, gefolgt vom Buchstaben `a`, gefolgt vom Buchstaben `r`. 
+Im Allgemeinen stellt das Zirkumflex `^` den Anfang einer Zeichenkette dar. Wenn es aber nach der öffnenden eckigen Klammer gesetzt wird, dann wird die Zeichenklasse negiert. Als Beispiel, der reguläre Ausdruck `[^c]ar` bedeutet: ein beliebiges Zeichen außer `c`, gefolgt vom Buchstaben `a`, gefolgt vom Buchstaben `r`. 
 
 
 "[^c]ar" => The car parked in the garage.
@@ -145,19 +145,17 @@ Im Allgemeinen stellt das Caret-Symbol `^` den Anfang einer Zeichenkette dar. We
 
 [Teste den regulären Ausdruck](https://regex101.com/r/nNNlq3/1)
 
-## 2.3 Repetitions
+## 2.3 Wiederholungen
 
-Following meta characters `+`, `*` or `?` are used to specify how many times a
-subpattern can occur. These meta characters act differently in different
-situations.
+Die Metazeichen `+`, `*` und `?` bieten einen einfachen Weg, anzugeben, wie oft sich ein bestimmter Teilausdruck wiederholen soll. Sie gehören damit zu den sogenannten "Quantoren".
+Sie können sich je nach Situation unterschiedlich verhalten.
 
-### 2.3.1 The Star
+### 2.3.1 Der Stern
 
-The symbol `*` matches zero or more repetitions of the preceding matcher. The
-regular expression `a*` means: zero or more repetitions of preceding lowercase
-character `a`. But if it appears after a character set or class then it finds
-the repetitions of the whole character set. For example, der reguläre Ausdruck
-`[a-z]*` means: any number of lowercase letters in a row.
+Das Symbol `*` stimmt mit beliebig vielen Wiederholungen des vorhergehenden Teilausdrucks überein. Der Ausdruck `a*` heißt: 
+null, eins oder mehrere `a`s in Folge. Da sich der Stern auf Teilausdrücke bezieht, kann er auch bspw. hinter einer Zeichenklasse stehen
+und stimmt dann mit beliebig vielen Zeichen aus der Klasse in Folge überein. Zum Beispiel bedeutet der Ausdruck `[a-z]*`: eine 
+beliebige Anzahl von Kleinbuchstaben in Folge.
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -165,12 +163,10 @@ the repetitions of the whole character set. For example, der reguläre Ausdruck
 
 [Teste den regulären Ausdruck](https://regex101.com/r/7m8me5/1)
 
-The `*` symbol can be used with the meta character `.` to match any string of
-characters `.*`. The `*` symbol can be used with the whitespace character `\s`
-to match a string of whitespace characters. For example, the expression
-`\s*cat\s*` means: zero or more spaces, followed by lowercase character `c`,
-followed by lowercase character `a`, followed by lowercase character `t`,
-followed by zero or more spaces.
+Das `*`-Symbol kann zusammen mit dem Metazeichen `.` verwendet werden, um mit einer vollkommen beliebigen Zeichenkette übereinzustimmen `.*`.
+Es kann auch mit der vordefinierten Zeichenklasse `\s` verwendet werden, um mit beliebig viel Leerraum (Leerzeichen, Tabulatoren, Zeilenumbrüchen)
+übereinzustimmen. Der Ausdruck `\s*cat\*` heißt zum Beispiel: null oder mehrere Leerzeichen, gefolgt von dem Buchstaben `c`, gefolgt vom Buchstaben `a`, 
+gefolgt vom Buchstaben `t` und schließlich gefolgt von null oder mehreren Leerzeichen.
 
 
 "\s*cat\s*" => The fat cat sat on the concatenation.
@@ -178,12 +174,11 @@ followed by zero or more spaces.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/gGrwuz/1)
 
-### 2.3.2 The Plus
+### 2.3.2 Das Plus
 
-The symbol `+` matches one or more repetitions of the preceding character. For
-example, der reguläre Ausdruck `c.+t` means: lowercase letter `c`, followed by
-at least one character, followed by the lowercase character `t`. It needs to be
-clarified that `t` is the last `t` in the sentence.
+Das `+`-Symbol stimmt mit einer oder mehr Wiederholungen des vorhergehenden Teilausdrucks überein. Der reguläre Ausdruck
+`c.+t` bedeutet: Buchstabe `c`, gefolgt von mindestens einem beliebigen Zeichen, gefolgt vom Buchstaben `t`. Das `t` ist dabei
+das letzte `t` in der hier zu sehenden Übereinstimmung, wobei es hier auch weitere Übereinstimmungen gäbe (siehe "Teste den regulären Ausdruck").
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -191,13 +186,11 @@ clarified that `t` is the last `t` in the sentence.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/Dzf9Aa/1)
 
-### 2.3.3 The Question Mark
+### 2.3.3 Das Fragezeichen
 
-In regular expression the meta character `?` makes the preceding character
-optional. This symbol matches zero or one instance of the preceding character.
-For example, der reguläre Ausdruck `[T]?he` means: Optional the uppercase
-letter `T`, followed by the lowercase character `h`, followed by the lowercase
-character `e`.
+In regulären Ausdrücken sorgt das Metazeichen `?` dafür, dass der vorhergehende Teilausdruck optional wird.
+Somit stimmt es mit null oder einer Übereinstimmung des Teilausdrucks überein.
+Zum Beispiel heißt der reguläre Ausdruck `[T]?he`: ein oder kein `T`, gefolgt von dem Buchstaben `h`, gefolgt von dem Buchstaben `e`.
 
 
 "[T]he" => The car is parked in the garage.
@@ -211,12 +204,11 @@ character `e`.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/kPpO2x/1)
 
-## 2.4 Braces
+## 2.4 Geschweifte Klammern
 
-In regular expression braces that are also called quantifiers are used to
-specify the number of times that a character or a group of characters can be
-repeated. For example, der reguläre Ausdruck `[0-9]{2,3}` means: Match at least
-2 digits but not more than 3 ( characters in the range of 0 to 9).
+Geschweifte Klammern `{}` gehören wie die zuvor behandelten Metazeichen zu den Quantoren. Sie werden verwendet, 
+um genau anzugeben wie oft ein Teilausdruck minimal und maximal hintereinander übereinstimmen muss.
+Zum Beispiel bedeutet der reguläre Ausdruck `[0-9]{2,3}`: Mindestens zwei, aber maximal drei Ziffern (Zeichenfolge 0-9) hintereinander.
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -224,9 +216,8 @@ repeated. For example, der reguläre Ausdruck `[0-9]{2,3}` means: Match at least
 
 [Teste den regulären Ausdruck](https://regex101.com/r/juM86s/1)
 
-We can leave out the second number. For example, der reguläre Ausdruck
-`[0-9]{2,}` means: Match 2 or more digits. If we also remove the comma the
-regular expression `[0-9]{3}` means: Match exactly 3 digits.
+Die zweite Zahl kann ausgelassen werden. Somit heißt der Ausdruck `[0-9]{2,}`: zwei oder mehr Ziffern in Folge.
+Wenn wir auch das Komma entfernen, heißt `[0-9]{3}`: genau drei Ziffern in Folge.
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -240,7 +231,9 @@ regular expression `[0-9]{3}` means: Match exactly 3 digits.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/Sivu30/1)
 
-## 2.5 Capturing Group
+## 2.5 Gruppierungen
+
+Eine Gruppierung fasst eine Gruppe von Teilausdrücken in Klammern `(...)` zusammen. 
 
 A capturing group is a group of sub-patterns that is written inside Parentheses 
 `(...)`. Like as we discussed before that in regular expression if we put a quantifier 

From e21f70b7dc8bcba5792f91711c156aa18c06bacf Mon Sep 17 00:00:00 2001
From: JohnnyJayJay <39348311+JohnnyJayJay@users.noreply.github.com>
Date: Thu, 25 Jun 2020 16:08:45 +0200
Subject: [PATCH 100/156] Continue work until flags

---
 translations/README-de.md | 278 +++++++++++++++++---------------------
 1 file changed, 126 insertions(+), 152 deletions(-)

diff --git a/translations/README-de.md b/translations/README-de.md
index 1de27b6f..fd85286b 100644
--- a/translations/README-de.md
+++ b/translations/README-de.md
@@ -46,14 +46,14 @@ Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, `
 - [Basis Vergleiche](#1-basis-vergleiche)
 - [Sonderzeichen](#2-sonderzeichen)
   - [Punkt](#21-punkt)
-  - [Zeichensätze](#22-zeichensätze)
-    - [Invertierter Zeichensatz](#221-invertierter-zeichensatz)
+  - [Zeichenklasse](#22-zeichenklasse)
+    - [Negierte Zeichenklasse](#221-negierte-zeichenklasse)
   - [Wiederholungen](#23-wiederholungen)
-    - [Stern *](#231-stern)
-    - [Plus +](#232-plus)
-    - [Fragezeichen ?](#233-fragezeichen)
-  - [Klammern {}](#24-klammern)
-  - [Zeichengruppen](#25-zeichengruppen)
+    - [Stern *](#231-der-stern)
+    - [Plus +](#232-das-plus)
+    - [Fragezeichen ?](#233-das-fragezeichen)
+  - [Geschweifte Klammern {}](#24-geschweifte-klammern)
+  - [Gruppierung](#25-gruppierung)
   - [Alternation |](#26-alternation)
   - [Auswertung von Sonderzeichen](#27-auswertung-von-sonderzeichen)
   - [Anker](#28-anker)
@@ -89,29 +89,30 @@ Der reguläre Ausdruck `123` entspricht der Zeichenkette `123`. Dieser reguläre
 
 [Teste den regulären Ausdruck](https://regex101.com/r/1paXsy/1)
 
-## 2. Sonderzeichen
+## 2. Metazeichen
 
-Sonderzeichen sind Bausteine von regulären Ausdrücken. Sonderzeichen stehen nicht für sich selbst, sondern werden in speziellen Fällen interpretiert. Einige Sonderzeichen haben eine besondere Bedeutung und sind innerhalb eckiger Klammern `[]`. Folgende Sonderzeichen sind möglich:
+Metazeichen sind Bausteine von regulären Ausdrücken. Sie stehen nicht für sich selbst, sondern haben eine besondere Bedeutung und werden in spezieller Weise interpretiert.
+Einige Metazeichen erhalten eine andere Bedeutung oder überhaupt erst eine besondere Bedeutung innerhalb eckiger Klammern `[]`. Folgende Metazeichen gibt es:
 
-|Sonderzeichen|Beschreibung|
+|Metazeichen|Beschreibung|
 |:----:|----|
-|.|Der Punkt entspricht jedem einzelnen Zeichen, außer einem Zeilenumbruch.|
-|[ ]|Zeichen-Klasse, entspricht jedem Zeichen innerhalb der eckigen Klammern.|
-|[^ ]|Negierte Zeichen-Klasse, entspricht jedem Zeichen welches nicht innerhalb der eckigen Klammern definiert ist.|
-|*|Entspricht 0 oder mehr Wiederholungen der voran gestellten Zeichen.|
-|+|Entspricht 1 oder mehr Wiederholungen der voran gestellten Zeichen.|
-|?|Macht das vorhergehende Zeichen optional.|
-|{n,m}|Klammern, entspricht mindestens "n", aber nicht mehr als "m" Wiederholungen des Zeichens.|
-|(xyz)|Zeichengruppe, entspricht den Zeichen xyz in der exakten Reihenfolge.|
-|||Alternation, entspricht entweder den Zeichen vor oder nach dem Sonderzeichen \|.|
-|\|Entfernt das nachfolgende Zeichen. Dies ermöglicht es Zeichen zu blockieren [ ] ( ) { } . * + ? ^ $ \ ||
-|^|Überprüft den Anfang einer Eingabe.|
-|$|Überprüft das Ende einer Eingabe.|
+|.|Der Punkt entspricht jedem einzelnen Zeichen, außer Zeilenumbrüchen.|
+|[ ]|Zeichenklasse, entspricht jedem Zeichen innerhalb der eckigen Klammern.|
+|[^ ]|Negierte Zeichenklasse, entspricht jedem Zeichen welches nicht innerhalb der eckigen Klammern definiert ist.|
+|*|Entspricht 0 oder mehr Wiederholungen des vorhergehenden Teilausdrucks.|
+|+|Entspricht 1 oder mehr Wiederholungen des vorhergehenden Teilausdrucks.|
+|?|Macht den vorhergehenden Teilausdruck optional.|
+|{n,m}|Entspricht mindestens "n", aber nicht mehr als "m" Wiederholungen des vorhergehenden Teilausdrucks.|
+|(xyz)|Gruppierung, entspricht den Zeichen xyz in der exakten Reihenfolge.|
+|||Alternation, entspricht entweder dem Teilausdruck vor oder nach dem \|.|
+|\|Escaped das nachfolgende Zeichen. Dies ermöglicht es Zeichen zu blockieren [ ] ( ) { } . * + ? ^ $ \ ||
+|^|Entspricht dem Anfang der Eingabe.|
+|$|Entspricht dem Ende der Eingabe.|
 
 ## 2.1 Punkt
 
-Der Punkt `.` ist die einfachste Möglichkeit von Sonderzeichen. Das Sonderzeichen `.`
- entspricht jedem einzelnen Zeichen. Es wird kein Zeilenumbruch oder Enter-Zeichen gefunden. Als Beispiel, der reguläre Ausdruck `.ar` bedeutet: ein beliebiges Zeichen, gefolgt von dem Buchstaben `a`, gefolgt vom Buchstaben `r`.
+Der Punkt `.` ist das einfachste Beispiel für ein Metazeichen. Er steht für jedes beliebiges Zeichen mit der Ausnahme von Zeilenumbrüchen/Enter-Zeichen. 
+Als Beispiel, der reguläre Ausdruck `.ar` bedeutet: ein beliebiges Zeichen, gefolgt von dem Buchstaben `a`, gefolgt vom Buchstaben `r`.
 
 
 ".ar" => The car parked in the garage.
@@ -120,7 +121,7 @@ Der Punkt `.` ist die einfachste Möglichkeit von Sonderzeichen. Das Sonderzeich
 
 ## 2.2 Zeichenklasse
 
-Zeichenklassen werden auch als Zeichenmengen oder -sätze bezeichnet. Sie werden in eckige Klammern definiert. Um eine Zeichenfolge wie `A-Z` oder `0-9` zu definieren, kann ein Bindestrich `-` verwendet werden. Die Reihenfolge sonstiger Zeichen innerhalb der eckigen Klammern spielt keine Rolle. Zum Beispiel bedeutet der reguläre Ausdruck `[Tt]he`: ein groß geschriebenes `T` oder ein kleingeschriebenes `t`, gefolgt vom Buchstaben `h` und weiter gefolgt vom Buchstaben `e`.
+Zeichenklassen werden auch als Zeichenmengen oder -sätze bezeichnet (eng. *character set/class*). Sie werden in eckige Klammern definiert. Um eine Zeichenfolge wie `A-Z` oder `0-9` zu definieren, kann ein Bindestrich `-` verwendet werden. Die Reihenfolge sonstiger Zeichen innerhalb der eckigen Klammern spielt keine Rolle. Zum Beispiel bedeutet der reguläre Ausdruck `[Tt]he`: ein groß geschriebenes `T` oder ein kleingeschriebenes `t`, gefolgt vom Buchstaben `h` und weiter gefolgt vom Buchstaben `e`.
 
 
 "[Tt]he" => The car parked in the garage.
@@ -137,7 +138,7 @@ Ein Punkt in einer Zeichenklasse bedeutet, anders als sonst, einen wörtlichen P
 
 ### 2.2.1 Negierte Zeichenklasse
 
-Im Allgemeinen stellt das Zirkumflex `^` den Anfang einer Zeichenkette dar. Wenn es aber nach der öffnenden eckigen Klammer gesetzt wird, dann wird die Zeichenklasse negiert. Als Beispiel, der reguläre Ausdruck `[^c]ar` bedeutet: ein beliebiges Zeichen außer `c`, gefolgt vom Buchstaben `a`, gefolgt vom Buchstaben `r`. 
+Im Allgemeinen stellt das Zirkumflex `^` den Anfang einer Zeichenkette dar. Wenn es aber nach der öffnenden eckigen Klammer gesetzt wird, dann wird die Zeichenklasse negiert (eng. *negated character set*). Als Beispiel, der reguläre Ausdruck `[^c]ar` bedeutet: ein beliebiges Zeichen außer `c`, gefolgt vom Buchstaben `a`, gefolgt vom Buchstaben `r`. 
 
 
 "[^c]ar" => The car parked in the garage.
@@ -147,7 +148,7 @@ Im Allgemeinen stellt das Zirkumflex `^` den Anfang einer Zeichenkette dar. Wenn
 
 ## 2.3 Wiederholungen
 
-Die Metazeichen `+`, `*` und `?` bieten einen einfachen Weg, anzugeben, wie oft sich ein bestimmter Teilausdruck wiederholen soll. Sie gehören damit zu den sogenannten "Quantoren".
+Die Metazeichen `+`, `*` und `?` bieten einen einfachen Weg, anzugeben, wie oft sich ein bestimmter Teilausdruck wiederholen soll. Sie gehören damit zu den sogenannten "Quantifizierern" (eng. *quantifier*).
 Sie können sich je nach Situation unterschiedlich verhalten.
 
 ### 2.3.1 Der Stern
@@ -206,7 +207,7 @@ Zum Beispiel heißt der reguläre Ausdruck `[T]?he`: ein oder kein `T`, gefolgt
 
 ## 2.4 Geschweifte Klammern
 
-Geschweifte Klammern `{}` gehören wie die zuvor behandelten Metazeichen zu den Quantoren. Sie werden verwendet, 
+Geschweifte Klammern `{}` gehören wie die zuvor behandelten Metazeichen zu den Quantifizierern. Sie werden verwendet, 
 um genau anzugeben wie oft ein Teilausdruck minimal und maximal hintereinander übereinstimmen muss.
 Zum Beispiel bedeutet der reguläre Ausdruck `[0-9]{2,3}`: Mindestens zwei, aber maximal drei Ziffern (Zeichenfolge 0-9) hintereinander.
 
@@ -233,16 +234,11 @@ Wenn wir auch das Komma entfernen, heißt `[0-9]{3}`: genau drei Ziffern in Folg
 
 ## 2.5 Gruppierungen
 
-Eine Gruppierung fasst eine Gruppe von Teilausdrücken in Klammern `(...)` zusammen. 
-
-A capturing group is a group of sub-patterns that is written inside Parentheses 
-`(...)`. Like as we discussed before that in regular expression if we put a quantifier 
-after a character then it will repeat the preceding character. But if we put quantifier
-after a capturing group then it repeats the whole capturing group. For example,
-der reguläre Ausdruck `(ab)*` matches zero or more repetitions of the character
-"ab". We can also use the alternation `|` meta character inside capturing group.
-For example, der reguläre Ausdruck `(c|g|p)ar` means: lowercase character `c`,
-`g` or `p`, followed by character `a`, followed by character `r`.
+Eine Gruppierung (eng. *capturing group*) fasst eine Gruppe von Teilausdrücken in Klammern `(...)` zusammen. 
+Eine Gruppierung selbst ist ebenfalls ein Teilausdruck, weshalb Quantoren wie `{}`, `*` oder `?` auf sie angewendet werden können.
+Zum Beispiel stimmt der reguläre Ausdruck `(ab)*` mit null oder mehr Vorkommen von `a` und `b` hintereinander überein.
+Auch das "Oder"-Metazeichen `|` kann innerhalb einer Gruppierung verwendet werden. Der reguläre Ausdruck `(c|g|p)ar` bedeutet:
+kleines `c`, `g` oder `p`, gefolgt vom Buchstaben `a`, gefolgt vom Buchstaben `r`. Dies ist äquivalent zu `[cgp]ar`.
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -250,16 +246,16 @@ For example, der reguläre Ausdruck `(c|g|p)ar` means: lowercase character `c`,
 
 [Teste den regulären Ausdruck](https://regex101.com/r/tUxrBG/1)
 
-Note that capturing groups do not only match but also capture the characters for use in 
-the parent language. The parent language could be python or javascript or virtually any
-language that implements regular expressions in a function definition.
+Gruppierungen stimmen nicht nur mit Zeichenketten überein, sondern "merken" sich auch die übereinstimmenden Zeichen in der Gruppe für die Verwendung in der Elternsprache
+(auch Rückwärtsreferenz genannt).
+Die Elternsprache kann Python, JavaScript oder sonst irgendeine Sprache sein, die reguläre Ausdrücke implementiert.
+
 
-### 2.5.1 Non-capturing group
+### 2.5.1 Gruppierungen ohne Rückwärtsreferenz
 
-A non-capturing group is a capturing group that only matches the characters, but 
-does not capture the group. A non-capturing group is denoted by a `?` followed by a `:` 
-within parenthesis `(...)`. For example, der reguläre Ausdruck `(?:c|g|p)ar` is similar to 
-`(c|g|p)ar` in that it matches the same characters but will not create a capture group.
+Gruppierungen ohne Rückwärtsreferenz (eng. *non-capturing groups*) sind Gruppierungen, die nur mit den Zeichen übereinstimmen, diese aber nicht für spätere Verwendung zwischenspeichern.
+Solche Gruppierungen werden mit einem `?`, gefolgt von einem `:` in Klammern `(...)` definiert.
+Somit gleicht der reguläre Ausdruck `(?:c|g|p)ar` dem Ausdruck `(c|g|p)ar` in seiner Übereinstimmung mit den Zeichenketten, aber im Gegensatz erzeugt er keine Rückwärtsreferenz.
 
 
 "(?:c|g|p)ar" => The car is parked in the garage.
@@ -267,22 +263,19 @@ within parenthesis `(...)`. For example, der reguläre Ausdruck `(?:c|g|p)ar` is
 
 [Teste den regulären Ausdruck](https://regex101.com/r/Rm7Me8/1)
 
-Non-capturing groups can come in handy when used in find-and-replace functionality or 
-when mixed with capturing groups to keep the overview when producing any other kind of output. 
-See also [4. Lookaround](#4-lookaround).
+Gruppierungen ohne Rückwärtsreferenz können für Finden-und-Ersetzen oder in Kombination mit normalen Gruppierungen nützlich sein, um den Überblick zu behalten, 
+wenn auf Basis der Übereinstimmungen eine Ausgabe erzeugt wird. Siehe auch [4. Lookaround](#4-lookaround).
 
 ## 2.6 Alternation
 
-In a regular expression, the vertical bar `|` is used to define alternation.
-Alternation is like an OR statement between multiple expressions. Now, you may be
-thinking that character set and alternation works the same way. But the big
-difference between character set and alternation is that character set works on
-character level but alternation works on expression level. For example, the
-regular expression `(T|t)he|car` means: either (uppercase character `T` or lowercase
-`t`, followed by lowercase character `h`, followed by lowercase character `e`) OR
-(lowercase character `c`, followed by lowercase character `a`, followed by
-lowercase character `r`). Note that I put the parentheses for clarity, to show that either expression
-in parentheses can be met and it will match.
+In einem regulären Ausdruck wird der Trennstrich `|` verwendet, um Alternativen (eng. *alternation*) zu definieren.
+Alternation ist wie ein "ODER" zwischen mehreren Teilausdrücken. Nun könnte man annehmen, dass
+Zeichenklassen und Alternation auf die gleiche Art und Weise funktionieren. Aber der große Unterschied 
+zwischen diesen beiden ist, dass Zeichenklassen für einzelne Zeichen funktionieren, während für Alternationen
+beliebige Teilausdrücke verwendet werden können. So heißt der reguläre Ausdruck `(T|t)he|car` beispielsweise:
+Entweder ein großes `T` oder kleines `t`, dann der Buchstabe `h` gefolgt vom Buchstaben `e` ODER 
+`c`, gefolgt von `a`, gefolgt von `r`. Man beachte die Klammern, die zur Trennung der einen Alternation von der anderen
+gesetzt wurden.
 
 
 "(T|t)he|car" => The car is parked in the garage.
@@ -290,18 +283,15 @@ in parentheses can be met and it will match.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/fBXyX0/1)
 
-## 2.7 Escaping special character
+## 2.7 Escape
 
-Backslash `\` is used in regular expression to escape the next character. This
-allows us to specify a symbol as a matching character including reserved
-characters `{ } [ ] / \ + * . $ ^ | ?`. To use a special character as a matching
-character prepend `\` before it.
+Der Backslash `\` wird in regulären Ausdrücken verwendet, um die besondere Bedeutung des folgenden Zeichens aufzuheben (eng. *escape*) oder ihm eine besondere Bedeutung zu verleihen 
+(s. [Vordefinierte Zeichenklassen](#3-vordefinierte-zeichenklassen)).
+Er erlaubt es, für andere Zwecke reservierte Zeichen wie die Metazeichen `{ } [ ] / \ + * . $ ^ | ?` als Literale, also wörtliche Übereinstimmungen zu nutzen.
+Um mit einem besonderen Zeichen wortwörtlich übereinzustimmen, muss es auf ein `\` folgen.
 
-For example, der reguläre Ausdruck `.` is used to match any character except
-newline. Now to match `.` in an input string der reguläre Ausdruck
-`(f|c|m)at\.?` means: lowercase letter `f`, `c` or `m`, followed by lowercase
-character `a`, followed by lowercase letter `t`, followed by optional `.`
-character.
+Der reguläre Ausdruck `.` zum Beispiel wird benutzt, um mit einem beliebigen Zeichen übereinzustimmen. 
+Der Ausdruck `(f|c|m)at\.?` hebt diese Bedeutung auf: `f`, `c` oder `m`, gefolgt von `a`, gefolgt von `t`, schließlich gefolgt von einem optionalen `.`.
 
 
 "(f|c|m)at\.?" => The fat cat sat on the mat.
@@ -309,24 +299,19 @@ character.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/DOc5Nu/1)
 
-## 2.8 Anchors
+## 2.8 Anker
 
-In regular expressions, we use anchors to check if the matching symbol is the
-starting symbol or ending symbol of the input string. Anchors are of two types:
-First type is Caret `^` that check if the matching character is the start
-character of the input and the second type is Dollar `$` that checks if matching
-character is the last character of the input string.
+In regulären Audrücken werden Anker (eng. *anchor*) verwendet, um zu überprüfen, ob der Teilausdruck mit dem 
+Anfang oder dem Ende der Teilausgabe übereinstimmt. Es gibt zwei Arten von Ankern: das Zirkumflex `^`
+stimmt mit dem Anfang, das Dollarzeichen `$` mit dem Ende der Eingabe überein.  
 
-### 2.8.1 Caret
+### 2.8.1 Zirkumflex
 
-Caret `^` symbol is used to check if matching character is the first character
-of the input string. If we apply the following regular expression `^a` (if a is
-the starting symbol) to input string `abc` it matches `a`. But if we apply
-regular expression `^b` on above input string it does not match anything.
-Because in input string `abc` "b" is not the starting symbol. Let's take a look
-at another regular expression `^(T|t)he` which means: uppercase character `T` or
-lowercase character `t` is the start symbol of the input string, followed by
-lowercase character `h`, followed by lowercase character `e`.
+Das Zirkumflex `^` (eng. *caret*) wird benutzt um zu überprüfen, ob der Teilausdruck mit dem Anfang der Zeichenkette übereinstimmt.
+Wenn wir den regulären Ausdruck `^a` auf die Eingabe `abc` anwenden, stimmt er mit `a` überein. 
+Aber wenn wir auf die gleiche Eingabe den Ausdruck `^b` anwenden, gibt es keine Übereinstimmungen, weil in der Zeichenkette `abc` kein "b"
+am Anfang steht. Schauen wir uns einen anderen Ausdruck an: `^(T|t)he`. Dieser bedeutet: kleines `t` oder großes `T` am Anfang der Eingabe,
+gefolgt von `h`, gefolgt von `e`.
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -342,10 +327,8 @@ lowercase character `h`, followed by lowercase character `e`.
 
 ### 2.8.2 Dollar
 
-Dollar `$` symbol is used to check if matching character is the last character
-of the input string. For example, regular expression `(at\.)$` means: a
-lowercase character `a`, followed by lowercase character `t`, followed by a `.`
-character and the matcher must be end of the string.
+Das Dollarzeichen `$` wird benutzt um zu überprüfen, ob der Teilausdruck mit dem Ende der Zeichenkette übereinstimmt.
+Der reguläre Ausdruck `(at\.)$` etwa bedeutet: `a`, gefolgt von `t` und dann `.` am Ende der Eingabe.
 
 
 "(at\.)" => The fat cat. sat. on the mat.
@@ -359,53 +342,47 @@ character and the matcher must be end of the string.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/t0AkOd/1)
 
-##  3. Shorthand Character Sets
+##  3. Vordefinierte Zeichenklassen
 
-Regular expression provides shorthands for the commonly used character sets,
-which offer convenient shorthands for commonly used regular expressions. The
-shorthand character sets are as follows:
+Reguläre Ausdrücke haben Kürzel für die am häufigsten benötigten Zeichenklassen, was viele Ausdrücke vereinfacht und kürzer macht.
+Das sind die vordefinierten Zeichenklassen:
 
 |Shorthand|Description|
 |:----:|----|
-|.|Any character except new line|
-|\w|Matches alphanumeric characters: `[a-zA-Z0-9_]`|
-|\W|Matches non-alphanumeric characters: `[^\w]`|
-|\d|Matches digit: `[0-9]`|
-|\D|Matches non-digit: `[^\d]`|
-|\s|Matches whitespace character: `[\t\n\f\r\p{Z}]`|
-|\S|Matches non-whitespace character: `[^\s]`|
+|.|Beliebiges Zeichen außer Zeilenumbruch|
+|\w|Stimmt mit alphanumerischen Zeichen überein: `[a-zA-Z0-9_]`|
+|\W|Stimmt mit nicht-alphanumerischen Zeichen überein: `[^\w]`|
+|\d|Stimmt mit Ziffern überein: `[0-9]`|
+|\D|Stimmt mit Zeichen, die keine Ziffern sind überein: `[^\d]`|
+|\s|Stimmt mit Leerraum überein: `[\t\n\f\r\p{Z}]`|
+|\S|Stimmt mit allem außer Leerraum überein: `[^\s]`|
 
 ## 4. Lookaround
 
-Lookbehind and lookahead (also called lookaround) are specific types of
-***non-capturing groups*** (Used to match the pattern but not included in matching
-list). Lookarounds are used when we have the condition that this pattern is
-preceded or followed by another certain pattern. For example, we want to get all
-numbers that are preceded by `$` character from the following input string
-`$4.44 and $10.88`. We will use following regular expression `(?<=\$)[0-9\.]*`
-which means: get all the numbers which contain `.` character and  are preceded
-by `$` character. Following are the lookarounds that are used in regular
-expressions:
-
-|Symbol|Description|
+Lookbehind ("nach hinten sehend") und Lookahead ("vorausschauend") (auch Lookaround ("Umsehen") genannt) sind besondere Arten von **Gruppierungen ohne Rückwärtsreferenz**
+(zur Erinnerung: das sind Gruppierungen, die zwar mit dem Muster übereinstimmen, aber sich die Übereinstimmung nicht "merken").
+Sie werden in Situationen verwendet, wo wir ein Muster einfangen wollen, dem andere Muster folgen oder vorhergehen.
+Zum Beispiel wollen wir alle Zahlen aus der Zeichenkette `$4.44 and $10.88`, vor denen ein Dollarzeichen `$` steht. Wir benutzen dafür den folgenden regulären Audruck:
+`(?<=\$)[0-9.]*`. Das heißt: Stimme mit allen Zeichenketten überein, die Ziffern `0-9` oder Punkte `.` enthalten und die einem Dollarzeichen `$` folgen.
+
+Das sind die Lookarounds, die es gibt:
+
+|Symbol|Name|
 |:----:|----|
-|?=|Positive Lookahead|
-|?!|Negative Lookahead|
-|?<=|Positive Lookbehind|
-|?
 "(T|t)he(?=\sfat)" => The fat cat sat on the mat.
@@ -413,15 +390,11 @@ or `the` which are followed by the word `fat`.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/IDDARt/1)
 
-### 4.2 Negative Lookahead
+### 4.2 Negativer Lookahead
 
-Negative lookahead is used when we need to get all matches from input string
-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
-from input string that are not followed by the word `fat` precedes by a space
-character.
+Negative Lookaheads werden verwendet, um alle Übereinstimmungen in einer Zeichenkette zu bekommen, auf die **nicht** ein bestimmtes Muster folgt.
+Ein Negativer Lookahead wird wie ein positiver Lookahead definiert, nur dass statt einem Gleichheitszeichen ein Ausrufezeichen `!` benutzt wird, d.h.
+`(?!...)`. Aus dem regulären Ausdruck `(T|t)he(?!\sfat)` folgt somit: alle `The` oder `the`, auf die **kein** Leerzeichen und das Wort `fat` folgt, stimmen überein.
 
 
 "(T|t)he(?!\sfat)" => The fat cat sat on the mat.
@@ -429,12 +402,11 @@ character.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/V32Npg/1)
 
-### 4.3 Positive Lookbehind
+### 4.3 Positiver Lookbehind
 
-Positive lookbehind is used to get all the matches that are preceded by a
-specific pattern. Positive lookbehind is denoted by `(?<=...)`. For example, the
-regular expression `(?<=(T|t)he\s)(fat|mat)` means: get all `fat` or `mat` words
-from input string that are after the word `The` or `the`.
+Positive Lookbehinds werden verwendet, um alle Übereinstimmungen in einer Zeichenkette zu bekommen, denen ein bestimmtes Muster vorhergeht.
+Postive Lookbehinds werden mit `(?<=...)` notiert. Der reguläre Ausdruck `(?<=(T|t)he\s)(fat|mat)` zum Beispiel bedeutet: alle `fat` oder `mat`, 
+die nach `The ` oder `the ` kommen, stimmen überein.
 
 
 "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -442,12 +414,11 @@ from input string that are after the word `The` or `the`.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/avH165/1)
 
-### 4.4 Negative Lookbehind
+### 4.4 Negativer Lookbehind
 
-Negative lookbehind is used to get all the matches that are not preceded by a
-specific pattern. Negative lookbehind is denoted by `(?
 "(?<!(T|t)he\s)(cat)" => The cat sat on cat.
@@ -455,19 +426,22 @@ string that are not after the word `The` or `the`.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/8Efx5G/1)
 
-## 5. Flags
+## 5. Modifikatoren
+
+Modifikatoren (eng. *flags* oder *modifiers*) verändern die Ausgabe eines regulären Ausdrucks. Sie können in beliebiger Kombination oder Reihenfolge 
+genutzt werden und sind ein integraler Bestandteil regulärer Ausdrücke.
 
-Flags are also called modifiers because they modify the output of a regular
-expression. These flags can be used in any order or combination, and are an
-integral part of the RegExp.
 
-|Flag|Description|
+|Modifikator|Beschreibung|
 |:----:|----|
-|i|Case insensitive: Sets matching to be case-insensitive.|
-|g|Global Search: Search for a pattern throughout the input string.|
-|m|Multiline: Anchor meta character works on each line.|
+|i|Schreibungsunabhängig: Unterschiede bei Groß- und Kleinschreibung in den Mustern werden ignoriert.|
+|g|Globale Suche: Die Suche geht durch die gesamte Eingabe.|
+|m|Mehrzeilig: Anker-Metazeichen funktionieren für Anfang/Ende jeder Zeile.|
+
+### 5.1 Schreibungsunabhängig
 
-### 5.1 Case Insensitive
+Der `i` Modifikator wird benutzt, um schreibungsunbhängige Übereinstimmungen zu finden. Zum Beispiel heißt der reguläre Ausdruck
+`/The/gi`: großes `T`
 
 The `i` modifier is used to perform case-insensitive matching. For example, the
 regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase

From 18293bc13cc18c39bd6ac6ce4c78147dd0aba067 Mon Sep 17 00:00:00 2001
From: JohnnyJayJay 
Date: Thu, 25 Jun 2020 19:14:32 +0200
Subject: [PATCH 101/156] Add information about i flag

---
 translations/README-de.md | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/translations/README-de.md b/translations/README-de.md
index fd85286b..f2d5536d 100644
--- a/translations/README-de.md
+++ b/translations/README-de.md
@@ -441,14 +441,9 @@ genutzt werden und sind ein integraler Bestandteil regulärer Ausdrücke.
 ### 5.1 Schreibungsunabhängig
 
 Der `i` Modifikator wird benutzt, um schreibungsunbhängige Übereinstimmungen zu finden. Zum Beispiel heißt der reguläre Ausdruck
-`/The/gi`: großes `T`
-
-The `i` modifier is used to perform case-insensitive matching. For example, the
-regular expression `/The/gi` means: uppercase letter `T`, followed by lowercase
-character `h`, followed by character `e`. And at the end of regular expression
-the `i` flag tells der reguläre Ausdruck engine to ignore the case. As you can
-see we also provided `g` flag because we want to search for the pattern in the
-whole input string.
+`/The/gi`: großes `T`, gefolgt von `h`, dann `e`. Und am Ende des Ausdrucks ist der `i` Modifikator zu finden, welcher der Maschine 
+zu verstehen gibt, dass Groß- und Kleinschreibung ignoriert werden soll. Wie zu sehen ist, wird auch der `g` Modifikator benutzt,
+da wir die gesamte Eingabe nach dem Muster absuchen wollen.
 
 
 "The" => The fat cat sat on the mat.
@@ -462,7 +457,7 @@ whole input string.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/ahfiuh/1)
 
-### 5.2 Global search
+### 5.2 Globale Suche
 
 The `g` modifier is used to perform a global match (find all matches rather than
 stopping after the first match). For example, der reguläre Ausdruck`/.(at)/g`

From c63cca4d220b1a32f5b6133d9a34e56af5869e58 Mon Sep 17 00:00:00 2001
From: JohnnyJayJay <39348311+JohnnyJayJay@users.noreply.github.com>
Date: Fri, 26 Jun 2020 08:37:08 +0200
Subject: [PATCH 102/156] finish remaining translation

---
 translations/README-de.md | 44 ++++++++++++++++++---------------------
 1 file changed, 20 insertions(+), 24 deletions(-)

diff --git a/translations/README-de.md b/translations/README-de.md
index f2d5536d..7db7222a 100644
--- a/translations/README-de.md
+++ b/translations/README-de.md
@@ -442,7 +442,7 @@ genutzt werden und sind ein integraler Bestandteil regulärer Ausdrücke.
 
 Der `i` Modifikator wird benutzt, um schreibungsunbhängige Übereinstimmungen zu finden. Zum Beispiel heißt der reguläre Ausdruck
 `/The/gi`: großes `T`, gefolgt von `h`, dann `e`. Und am Ende des Ausdrucks ist der `i` Modifikator zu finden, welcher der Maschine 
-zu verstehen gibt, dass Groß- und Kleinschreibung ignoriert werden soll. Wie zu sehen ist, wird auch der `g` Modifikator benutzt,
+zu verstehen gibt, dass Groß- und Kleinschreibung ignoriert werden sollen. Wie zu sehen ist, wird auch der `g` Modifikator benutzt,
 da wir die gesamte Eingabe nach dem Muster absuchen wollen.
 
 
@@ -459,11 +459,10 @@ da wir die gesamte Eingabe nach dem Muster absuchen wollen.
 
 ### 5.2 Globale Suche
 
-The `g` modifier is used to perform a global match (find all matches rather than
-stopping after the first match). For example, der reguläre Ausdruck`/.(at)/g`
-means: any character except new line, followed by lowercase character `a`,
-followed by lowercase character `t`. Because we provided `g` flag at the end of
-der reguläre Ausdruck now it will find all matches in the input string, not just the first one (which is the default behavior).
+Der `g` Modifikator wird benutzt, um eine globale Suche durchzuführen (alle Übereinstimmungen finden, nicht nach der ersten aufhören).
+Zum Beispiel heißt der reguläre Ausdruck `/.(at)/g`: ein beliebiges Zeichen (außer Zeilenumbruch), gefolgt von `a`, gefolgt von `t`.
+Weil wir den `g` Modifikator angegeben haben, findet der reguläre Ausdruck nun alle Übereinstimmungen in der Eingabe, nicht nur die erste
+(was das Standardverhalten ist).
 
 
 "/.(at)/" => The fat cat sat on the mat.
@@ -477,15 +476,12 @@ der reguläre Ausdruck now it will find all matches in the input string, not jus
 
 [Teste den regulären Ausdruck](https://regex101.com/r/dO1nef/1)
 
-### 5.3 Multiline
+### 5.3 Mehrzeilig
 
-The `m` modifier is used to perform a multi-line match. As we discussed earlier
-anchors `(^, $)` are used to check if pattern is the beginning of the input or
-end of the input string. But if we want that anchors works on each line we use
-`m` flag. For example, der reguläre Ausdruck `/at(.)?$/gm` means: lowercase
-character `a`, followed by lowercase character `t`, optionally anything except
-new line. And because of `m` flag now regular expression engine matches pattern
-at the end of each line in a string.
+Der `m` Modifikator wird benutzt, um eine mehrzeilige Suche durchzuführen. Wie zuvor erwähnt werden Anker `(^, $)` genutzt, um zu überprüfen,
+ob ein Muster dem Anfang oder dem Ende der Eingabe entspricht. Wenn wir stattdessen wollen, dass Anker zeilenweise funktionieren, nutzen wir den `m`
+Modifikator. Zum Beispiel bedeutet der reguläre Ausdruck `/at(.)?$/gm`: `a`, gefolgt von `t`, dann optional ein beliebiges Zeichen außer 
+Zeilenumbruch. Wegen des `m` Modifikators wird das Muster nun auf das Ende jeder Zeile statt nur das Ende der gesamten Eingabe angewandt.
 
 
 "/.at(.)?$/" => The fat
@@ -503,9 +499,10 @@ at the end of each line in a string.
 
 [Teste den regulären Ausdruck](https://regex101.com/r/E88WE2/1)
 
-## 6. Greedy vs lazy matching
-By default regex will do greedy matching , means it will match as long as
-possible. we can use `?` to match in lazy way means as short as possible
+## 6. Gier vs Faulheit
+
+Standardmäßig finden reguläre Ausdrücke Übereinstimmungen mit Gier (eng. *greed*), d.h. es wird nach den längsten Übereinstimmungen gesucht. 
+Mit `?` können wir faul (eng. *lazy*) suchen, d.h. es wird nach den kürzesten Übereinstimmungen gesucht.
 
 
 "/(.*at)/" => The fat cat sat on the mat. 
@@ -519,14 +516,13 @@ possible. we can use `?` to match in lazy way means as short as possible [Teste den regulären Ausdruck](https://regex101.com/r/AyAdgJ/2) +## Beitragen -## Contribution - -* Open pull request with improvements -* Discuss ideas in issues -* Spread the word -* Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) +* Öffne pull requests mit Verbesserungen +* Diskutiere Ideen in issues +* Erzähl es anderen +* Gebt Rückmeldung [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) -## License +## Lizenz MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) From f0a00dc5c93139975cb4dd3d0e9eb75f8dc33cbb Mon Sep 17 00:00:00 2001 From: JohnnyJayJay <39348311+JohnnyJayJay@users.noreply.github.com> Date: Fri, 26 Jun 2020 08:47:43 +0200 Subject: [PATCH 103/156] Adjust table of contents and a few titles --- translations/README-de.md | 50 +++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 7db7222a..5fd85070 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -22,7 +22,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -## Was sind reguläre Ausdrücke +## Was sind Reguläre Ausdrücke? > Ein regulärer Ausdruck ist eine Gruppe von Buchstaben und Symbolen, die benutzt werden um ein spezifisches Muster in einem Text zu finden Ein regulärer Ausdruch ist ein Muster, das mit einem zu durchsuchenden Text von links nach rechts abgeglichen wird. Die Bezeichnung @@ -41,35 +41,35 @@ den Benutzernamen zu überprüfen: Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Der Eingabe `Jo` wird nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. -## Table of Contents +## Inhaltsverzeichnis -- [Basis Vergleiche](#1-basis-vergleiche) -- [Sonderzeichen](#2-sonderzeichen) +- [Einfache Muster](#1-einfache-muster) +- [Metazeichen](#2-metazeichen) - [Punkt](#21-punkt) - [Zeichenklasse](#22-zeichenklasse) - [Negierte Zeichenklasse](#221-negierte-zeichenklasse) - [Wiederholungen](#23-wiederholungen) - - [Stern *](#231-der-stern) - - [Plus +](#232-das-plus) - - [Fragezeichen ?](#233-das-fragezeichen) + - [Stern *](#231-stern) + - [Plus +](#232-plus) + - [Fragezeichen ?](#233-fragezeichen) - [Geschweifte Klammern {}](#24-geschweifte-klammern) - - [Gruppierung](#25-gruppierung) + - [Gruppierung ()](#25-gruppierung) - [Alternation |](#26-alternation) - - [Auswertung von Sonderzeichen](#27-auswertung-von-sonderzeichen) + - [Escaping \](#27-escaping) - [Anker](#28-anker) - - [Caret ^](#281-caret) + - [Zirkumflex ^](#281-zirkumflex) - [Dollar $](#282-dollar) -- [Kurzschreibweisen](#3-kurzschreibweisen) -- [Umschauen](#4-umschauen) - - [Positives Vorrausschauen](#41-positives-vorausschauen) - - [Negatives Vorrausschauen](#42-negatives-vorausschauen) - - [Positives Zurückschauen](#43-positives-zurückschauen) - - [Negatives Zurückschauen](#44-negatives-zurückschauen) -- [Steuerparameter](#5-steuerparameter) - - [Groß-/Kleinschreibung](#51-groß-kleinschreibung) +- [Vordefinierte Zeichenklassen](#3-vordefinierte-zeichenklassen) +- [Lookaround](#4-lookaround) + - [Positiver Lookahead](#41-positiver-lookahead) + - [Negativer Lookahead](#42-negativer-lookahead) + - [Positiver Lookbehind](#43-positiver-lookbehind) + - [Negativer Lookbehind](#44-negativer-lookbehind) +- [Modifikatoren](#5-modifikatoren) + - [Schreibungsunabhängig i](#51-schreibungsunbhängig) - [Globale Suche](#52-globale-suche) - [Mehrzeilig](#53-mehrzeilig) -- [Gierige oder faule Übereinstimmung](#6-gierige-oder-faule-übereinstimmung) +- [Gierige vs Faule Übereinstimmung](#6-gierige-vs-faule-übereinstimmung) ## 1. Einfache Muster @@ -151,7 +151,7 @@ Im Allgemeinen stellt das Zirkumflex `^` den Anfang einer Zeichenkette dar. Wenn Die Metazeichen `+`, `*` und `?` bieten einen einfachen Weg, anzugeben, wie oft sich ein bestimmter Teilausdruck wiederholen soll. Sie gehören damit zu den sogenannten "Quantifizierern" (eng. *quantifier*). Sie können sich je nach Situation unterschiedlich verhalten. -### 2.3.1 Der Stern +### 2.3.1 Stern Das Symbol `*` stimmt mit beliebig vielen Wiederholungen des vorhergehenden Teilausdrucks überein. Der Ausdruck `a*` heißt: null, eins oder mehrere `a`s in Folge. Da sich der Stern auf Teilausdrücke bezieht, kann er auch bspw. hinter einer Zeichenklasse stehen @@ -175,7 +175,7 @@ gefolgt vom Buchstaben `t` und schließlich gefolgt von null oder mehreren Leerz [Teste den regulären Ausdruck](https://regex101.com/r/gGrwuz/1) -### 2.3.2 Das Plus +### 2.3.2 Plus Das `+`-Symbol stimmt mit einer oder mehr Wiederholungen des vorhergehenden Teilausdrucks überein. Der reguläre Ausdruck `c.+t` bedeutet: Buchstabe `c`, gefolgt von mindestens einem beliebigen Zeichen, gefolgt vom Buchstaben `t`. Das `t` ist dabei @@ -187,7 +187,7 @@ das letzte `t` in der hier zu sehenden Übereinstimmung, wobei es hier auch weit [Teste den regulären Ausdruck](https://regex101.com/r/Dzf9Aa/1) -### 2.3.3 Das Fragezeichen +### 2.3.3 Fragezeichen In regulären Ausdrücken sorgt das Metazeichen `?` dafür, dass der vorhergehende Teilausdruck optional wird. Somit stimmt es mit null oder einer Übereinstimmung des Teilausdrucks überein. @@ -283,7 +283,7 @@ gesetzt wurden. [Teste den regulären Ausdruck](https://regex101.com/r/fBXyX0/1) -## 2.7 Escape +## 2.7 Escaping Der Backslash `\` wird in regulären Ausdrücken verwendet, um die besondere Bedeutung des folgenden Zeichens aufzuheben (eng. *escape*) oder ihm eine besondere Bedeutung zu verleihen (s. [Vordefinierte Zeichenklassen](#3-vordefinierte-zeichenklassen)). @@ -359,7 +359,7 @@ Das sind die vordefinierten Zeichenklassen: ## 4. Lookaround -Lookbehind ("nach hinten sehend") und Lookahead ("vorausschauend") (auch Lookaround ("Umsehen") genannt) sind besondere Arten von **Gruppierungen ohne Rückwärtsreferenz** +Lookbehind ("zurückschauen") und Lookahead ("vorausschauen") (auch Lookaround ("Umsehen") genannt) sind besondere Arten von **Gruppierungen ohne Rückwärtsreferenz** (zur Erinnerung: das sind Gruppierungen, die zwar mit dem Muster übereinstimmen, aber sich die Übereinstimmung nicht "merken"). Sie werden in Situationen verwendet, wo wir ein Muster einfangen wollen, dem andere Muster folgen oder vorhergehen. Zum Beispiel wollen wir alle Zahlen aus der Zeichenkette `$4.44 and $10.88`, vor denen ein Dollarzeichen `$` steht. Wir benutzen dafür den folgenden regulären Audruck: @@ -499,7 +499,7 @@ Zeilenumbruch. Wegen des `m` Modifikators wird das Muster nun auf das Ende jeder [Teste den regulären Ausdruck](https://regex101.com/r/E88WE2/1) -## 6. Gier vs Faulheit +## 6. Gierige vs Faule Übereinstimmung Standardmäßig finden reguläre Ausdrücke Übereinstimmungen mit Gier (eng. *greed*), d.h. es wird nach den längsten Übereinstimmungen gesucht. Mit `?` können wir faul (eng. *lazy*) suchen, d.h. es wird nach den kürzesten Übereinstimmungen gesucht. From 0b5391fbd48ddd8f5ae1c26836a52cff4755c1a9 Mon Sep 17 00:00:00 2001 From: JohnnyJayJay <39348311+JohnnyJayJay@users.noreply.github.com> Date: Fri, 26 Jun 2020 08:52:43 +0200 Subject: [PATCH 104/156] Make contributing section grammar consistent --- translations/README-de.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-de.md b/translations/README-de.md index 5fd85070..787e60f5 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -521,7 +521,7 @@ Mit `?` können wir faul (eng. *lazy*) suchen, d.h. es wird nach den kürzesten * Öffne pull requests mit Verbesserungen * Diskutiere Ideen in issues * Erzähl es anderen -* Gebt Rückmeldung [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) +* Gib Rückmeldung [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) ## Lizenz From daf704e8c1286e37b37059b57eaf7c7601fc9de1 Mon Sep 17 00:00:00 2001 From: JohnnyJayJay <39348311+JohnnyJayJay@users.noreply.github.com> Date: Fri, 26 Jun 2020 09:04:15 +0200 Subject: [PATCH 105/156] Fix old grammar in early sections --- translations/README-de.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 787e60f5..f55f7289 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -24,22 +24,21 @@ ## Was sind Reguläre Ausdrücke? -> Ein regulärer Ausdruck ist eine Gruppe von Buchstaben und Symbolen, die benutzt werden um ein spezifisches Muster in einem Text zu finden +> Ein regulärer Ausdruck ist eine Gruppe von Buchstaben und Symbolen, die benutzt werden um ein bestimmtes Muster in einem Text zu finden. Ein regulärer Ausdruch ist ein Muster, das mit einem zu durchsuchenden Text von links nach rechts abgeglichen wird. Die Bezeichnung -"Regulärer Ausdruck" ist in der Praxis unüblich und stattdessen wird häufig die Englische Abkürzung "Regex" verwendet. Reguläre -Ausdrücke werden verwendet um Fragemente eines Textes zu ersetzen, Formulare zu validieren, Segmente eines Textes anhand eines +"Regulärer Ausdruck" ist in der Praxis unüblich und stattdessen wird häufig die Englische Abkürzung "Regex" oder "RegExp" (*regular expression*) verwendet. Reguläre +Ausdrücke werden verwendet, um Fragemente eines Textes zu ersetzen, Formulare zu validieren, Segmente eines Textes anhand eines Musters zu extrahieren und für vieles mehr. -Angenommen Du schreibst eine Applikation und möchtest die Regeln definieren, nach denen ein Benutzer seinen Benutzernamen auswählen +Angenommen, Du schreibst eine Anwendung und möchtest die Regeln definieren, nach denen ein Benutzer seinen Benutzernamen auswählen kann. Wir möchten festlegen, dass der Benutzernamen Buchstaben, Ziffern, Unter- und Bindestriche beinhalten darf. Außerdem wollen -wir die Anzahl der Zeichen limitieren, damit der Name nicht unlesbar wird. Dazu verwenden wir den folgenden regulären Ausdruck um -den Benutzernamen zu überprüfen: +wir die Anzahl der Zeichen limitieren, damit der Name nicht unlesbar wird. Dazu verwenden wir den folgenden regulären Ausdruck:

Regular expression

-Der abgebildete reguläre Ausdruck erlaubt bspw. folgende Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Der Eingabe `Jo` wird nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. +Der abgebildete reguläre Ausdruck erlaubt bspw. die Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Der Eingabe `Jo` wird nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. ## Inhaltsverzeichnis @@ -81,7 +80,8 @@ Ein regulärer Ausdruck ist einfach nur ein Muster von Zeichen, welches für ein [Teste den regulären Ausdruck](https://regex101.com/r/dmRygT/1) -Der reguläre Ausdruck `123` entspricht der Zeichenkette `123`. Dieser reguläre Ausdruck wird auf Übereinstimmung mit einer Zeichenkette überprüft, indem jedes Zeichen in dem regulären Ausdruck nacheinander mit den Zeichen in der Zeichenkette verglichen wird. Reguläre Ausdrücke sind normalerweise case sensitiv, Beachtung von Groß-/Kleinschreibung, sodass der Ausdruck `The` nicht mit der Zeichenkette `the` überein stimmen würde. +Der reguläre Ausdruck `123` entspricht der Zeichenkette `123`. Auf Übereinstimmung mit einer Zeichenkette wird er überprüft, indem jedes Zeichen in dem regulären Ausdruck nacheinander mit jedem Zeichen der Zeichenkette verglichen wird. +Reguläre Ausdrücke berücksichtigen normalerweise Groß- und Kleinschreibung, sodass etwa der Ausdruck `The` nicht mit der Zeichenkette `the` übereinstimmen würde.
 "The" => The fat cat sat on the mat.

From e3945a4cbcdf68baf8f6a734642ed3ca4f55e7be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ja=CC=81nos=20Orcsik?= 
Date: Tue, 30 Jun 2020 00:16:07 +0200
Subject: [PATCH 106/156] fix typo

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 1428d17f..55da5cec 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
 * [Tiếng Việt](translations/README-vn.md)
 * [فارسی](translations/README-fa.md)
 
-## What are Regular Expressions?
+## What is Regular Expression?
 
 > A regular expression is a group of characters or symbols which is used to find a specific pattern in a text.
 
@@ -280,7 +280,7 @@ regular expression `[0-9]{3}` means: Match exactly 3 digits.
 
 ## 2.5 Capturing Groups
 
-A capturing group is a group of sub-patterns that is written inside parentheses 
+A capturing group is a group of subpatterns that is written inside parentheses 
 `(...)`. As discussed before, in regular expressions, if we put a quantifier 
 after a character then it will repeat the preceding character. But if we put a quantifier
 after a capturing group then it repeats the whole capturing group. For example,
@@ -356,7 +356,7 @@ character.
 
 In regular expressions, we use anchors to check if the matching symbol is the
 starting symbol or ending symbol of the input string. Anchors are of two types:
-The first type is the caret `^` that check if the matching character is the first
+The first type is the caret `^` that checks if the matching character is the first
 character of the input and the second type is the dollar sign `$` which checks if a matching
 character is the last character of the input string.
 

From 006b7a1a984b5f8cbd5dc6a76373cad123ff042e Mon Sep 17 00:00:00 2001
From: Daniel de Andrade Lopes 
Date: Sat, 4 Jul 2020 08:58:16 -0300
Subject: [PATCH 107/156] Update Readme.md

I see some errors in writing and in one expression, so I open this PR to improvements.
---
 translations/README-pt_BR.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md
index 774cd219..1c8e474a 100644
--- a/translations/README-pt_BR.md
+++ b/translations/README-pt_BR.md
@@ -36,7 +36,7 @@
 
 > Expressão Regular é um grupo de caracteres ou símbolos utilizado para encontrar um padrão específico a partir de um texto.
 
-Uma expressão regular é um padrão que é comparado com uma cadeia de caracteres da esquerda para a direita. A expressão "Expressão regular" é longa e difícil de falar; você geralmente vai encontrar o termo abreviado como "regex" ou "regexp". Expressões regulares são usadas para substituir um texto dentro de uma string, validar formulários, extrair uma parte de uma string baseada em um padrão encontrado e muito mais.
+Uma expressão regular é um padrão que é comparado com uma cadeia de caracteres da esquerda para a direita. O termo "Expressão regular" é longo e difícil de falar; você geralmente vai encontrar o termo abreviado como "regex" ou "regexp". Expressões regulares são usadas para substituir um texto dentro de uma string, validar formulários, extrair uma parte de uma string baseada em um padrão encontrado e muito mais.
 
 Imagine que você está escrevendo uma aplicação e quer colocar regras para quando um usuário escolher seu username. Nós queremos permitir que o username contenha letras, números, underlines e hífens. Nós também queremos limitar o número de caracteres para não ficar muito feio. Então usamos a seguinte expressão regular para validar o username:
 
@@ -307,7 +307,7 @@ As expressões regulares fornecem abreviações para conjuntos de caracteres com
 
 ## 4. Olhar ao Redor
 
-Lookbehind (olhar atrás) e lookahead (olhar à frente), às vezes conhecidos como lookarounds (olhar ao redor), são tipos específicos de ***grupo de não captura*** (utilizado para encontrar um padrão, mas não incluí-lo na lista de ocorrêncoas). Lookarounds são usados quando temos a condição de que determinado padrão seja precedido ou seguido de outro padrão. Por exemplo, queremos capturar todos os números precedidos do caractere `$` da seguinte string de entrada: `$4.44 and $10.88`. Vamos usar a seguinte expressão regular `(?<=\$)[0-9\.]*` que significa: procure todos os números que contêm o caractere `.` e são precedidos pelo caractere `$`. A seguir estão os lookarounds que são utilizados em expressões regulares:
+Lookbehind (olhar atrás) e lookahead (olhar à frente), às vezes conhecidos como lookarounds (olhar ao redor), são tipos específicos de ***grupo de não captura*** (utilizado para encontrar um padrão, mas não incluí-lo na lista de ocorrências). Lookarounds são usados quando temos a condição de que determinado padrão seja precedido ou seguido de outro padrão. Por exemplo, queremos capturar todos os números precedidos do caractere `$` da seguinte string de entrada: `$4.44 and $10.88`. Vamos usar a seguinte expressão regular `(?<=\$)[0-9\.]*` que significa: procure todos os números que contêm o caractere `.` e são precedidos pelo caractere `$`. A seguir estão os lookarounds que são utilizados em expressões regulares:
 
 |Símbolo|Descrição|
 |:----:|----|
@@ -318,7 +318,7 @@ Lookbehind (olhar atrás) e lookahead (olhar à frente), às vezes conhecidos co
 
 ### 4.1 Lookahead Positivo
 
-O lookahead positivo impõe que a primeira parte da expressão deve ser seguida pela expressão lookahead. A combinação retornada contém apenas o texto que encontrado pela primeira parte da expressão. Para definir um lookahead positivo, deve-se usar parênteses. Dentro desses parênteses, é usado um ponto de interrogação seguido de um sinal de igual, dessa forma: `(?=...)`. Expressões lookahead são escritas depois do sinal de igual dentro do parênteses. Por exemplo, a expressão regular `[T|t]he(?=\sfat)` significa: encontre a letra minúscula `t` ou a letra maiúscula `T`, seguida da letra `h`, seguida da letra `e`. Entre parênteses, nós definimos o lookahead positivo que diz para o motor de expressões regulares para encontrar `The` ou `the` que são seguidos pela palavra `fat`.
+O lookahead positivo impõe que a primeira parte da expressão deve ser seguida pela expressão lookahead. A combinação retornada contém apenas o texto que é encontrado pela primeira parte da expressão. Para definir um lookahead positivo, deve-se usar parênteses. Dentro desses parênteses, é usado um ponto de interrogação seguido de um sinal de igual, dessa forma: `(?=...)`. Expressões lookahead são escritas depois do sinal de igual dentro do parênteses. Por exemplo, a expressão regular `[T|t]he(?=\sfat)` significa: encontre a letra minúscula `t` ou a letra maiúscula `T`, seguida da letra `h`, seguida da letra `e`. Entre parênteses, nós definimos o lookahead positivo que diz para o motor de expressões regulares para encontrar `The` ou `the` que são seguidos pela palavra `fat`.
 
 
 "[T|t]he(?=\sfat)" => The fat cat sat on the mat.
@@ -400,7 +400,7 @@ O modificador `g` é usado para realizar uma busca global (encontrar todas as oc
 
 ### 5.3 Multilinhas
 
-O modificador `m` é usado para realizar uma busca em várias linhas. Como falamos antes, as âncoras `(^, $)` são usadas para verificar se o padrão está no início ou no final da string de entrada. Mas se queremos que as âncoras funcionem em cada uma das linhas, usamos a flag `m`. Por exemplo, a expressão regular `/at(.)?$/gm` significa: o caractere minúsculo `a`, seguido do caractere minúsculo `t`, opcionalmente seguido por qualquer caractere, exceto nova linha. E por causa da flag `m`, agora o motor de expressões regulares encontra o padrão no final de cada uma das linhas da string.
+O modificador `m` é usado para realizar uma busca em várias linhas. Como falamos antes, as âncoras `(^, $)` são usadas para verificar se o padrão está no início ou no final da string de entrada respectivamente. Mas se queremos que as âncoras funcionem em cada uma das linhas, usamos a flag `m`. Por exemplo, a expressão regular `/.at(.)?$/gm` significa: o caractere minúsculo `a`, seguido do caractere minúsculo `t`, opcionalmente seguido por qualquer caractere, exceto nova linha. E por causa da flag `m`, agora o motor de expressões regulares encontra o padrão no final de cada uma das linhas da string.
 
 
 "/.at(.)?$/" => The fat

From 2ad85e2142d1186a2accfbfca6e76b0143adc809 Mon Sep 17 00:00:00 2001
From: byNoobiYT 
Date: Tue, 14 Jul 2020 09:46:26 +0200
Subject: [PATCH 108/156] Ausdruch -> Ausdruck

---
 translations/README-de.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-de.md b/translations/README-de.md
index f55f7289..f1f07d24 100644
--- a/translations/README-de.md
+++ b/translations/README-de.md
@@ -25,7 +25,7 @@
 ## Was sind Reguläre Ausdrücke?
 
 > Ein regulärer Ausdruck ist eine Gruppe von Buchstaben und Symbolen, die benutzt werden um ein bestimmtes Muster in einem Text zu finden.
-Ein regulärer Ausdruch ist ein Muster, das mit einem zu durchsuchenden Text von links nach rechts abgeglichen wird. Die Bezeichnung
+Ein regulärer Ausdruck ist ein Muster, das mit einem zu durchsuchenden Text von links nach rechts abgeglichen wird. Die Bezeichnung
 "Regulärer Ausdruck" ist in der Praxis unüblich und stattdessen wird häufig die Englische Abkürzung "Regex" oder "RegExp" (*regular expression*) verwendet. Reguläre
 Ausdrücke werden verwendet, um Fragemente eines Textes zu ersetzen, Formulare zu validieren, Segmente eines Textes anhand eines
 Musters zu extrahieren und für vieles mehr.

From 17eee4f89d59ba2db486421199cd88f3ca741621 Mon Sep 17 00:00:00 2001
From: Femi Oladeji 
Date: Thu, 6 Aug 2020 09:27:35 +0200
Subject: [PATCH 109/156] fix The full stop link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 55da5cec..5e5acdbe 100644
--- a/README.md
+++ b/README.md
@@ -61,7 +61,7 @@ letter and also it is too short.
 
 - [Basic Matchers](#1-basic-matchers)
 - [Meta Characters](#2-meta-characters)
-  - [The Full Stop](#21-the-full-stops)
+  - [The Full Stop](#21-the-full-stop)
   - [Character Sets](#22-character-sets)
     - [Negated Character Sets](#221-negated-character-sets)
   - [Repetitions](#23-repetitions)

From 5dc6310c7901e03e08b065514fa67947f90563b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Frank=20B=C3=BCltge?= 
Date: Fri, 2 Oct 2020 12:29:09 +0200
Subject: [PATCH 110/156] Small improvements for clean German language

---
 translations/README-de.md | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/translations/README-de.md b/translations/README-de.md
index f55f7289..b888c806 100644
--- a/translations/README-de.md
+++ b/translations/README-de.md
@@ -357,7 +357,7 @@ Das sind die vordefinierten Zeichenklassen:
 |\s|Stimmt mit Leerraum überein: `[\t\n\f\r\p{Z}]`|
 |\S|Stimmt mit allem außer Leerraum überein: `[^\s]`|
 
-## 4. Lookaround
+## 4. Umsehen (Lookaround)
 
 Lookbehind ("zurückschauen") und Lookahead ("vorausschauen") (auch Lookaround ("Umsehen") genannt) sind besondere Arten von **Gruppierungen ohne Rückwärtsreferenz**
 (zur Erinnerung: das sind Gruppierungen, die zwar mit dem Muster übereinstimmen, aber sich die Übereinstimmung nicht "merken").
@@ -374,7 +374,7 @@ Das sind die Lookarounds, die es gibt:
 |?<=|Positiver Lookbehind|
 |?
-"/(.*at)/" => The fat cat sat on the mat. 
+"/(.*at)/" => The fat cat sat on the mat. +
[Teste den regulären Ausdruck](https://regex101.com/r/AyAdgJ/1)
-"/(.*?at)/" => The fat cat sat on the mat. 
+"/(.*?at)/" => The fat cat sat on the mat. +
[Teste den regulären Ausdruck](https://regex101.com/r/AyAdgJ/2) ## Beitragen -* Öffne pull requests mit Verbesserungen -* Diskutiere Ideen in issues +* Öffne Pull Requests mit Verbesserungen +* Diskutiere Ideen in Issues * Erzähl es anderen * Gib Rückmeldung [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) From de9c5ca5e448f13a70a0b8f07d983a7d3a83d4ea Mon Sep 17 00:00:00 2001 From: Patrik P Date: Tue, 6 Oct 2020 23:36:07 +0200 Subject: [PATCH 111/156] Fixed typo in the German translation at line 169 Fixed typo in the German translation at line 169 --- translations/README-de.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-de.md b/translations/README-de.md index b888c806..d441c3f2 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -166,7 +166,7 @@ beliebige Anzahl von Kleinbuchstaben in Folge. Das `*`-Symbol kann zusammen mit dem Metazeichen `.` verwendet werden, um mit einer vollkommen beliebigen Zeichenkette übereinzustimmen `.*`. Es kann auch mit der vordefinierten Zeichenklasse `\s` verwendet werden, um mit beliebig viel Leerraum (Leerzeichen, Tabulatoren, Zeilenumbrüchen) -übereinzustimmen. Der Ausdruck `\s*cat\*` heißt zum Beispiel: null oder mehrere Leerzeichen, gefolgt von dem Buchstaben `c`, gefolgt vom Buchstaben `a`, +übereinzustimmen. Der Ausdruck `\s*cat\s*` heißt zum Beispiel: null oder mehrere Leerzeichen, gefolgt von dem Buchstaben `c`, gefolgt vom Buchstaben `a`, gefolgt vom Buchstaben `t` und schließlich gefolgt von null oder mehreren Leerzeichen.

From 506f0a464ce2d7192068f82e47bb20b8ea12e6e6 Mon Sep 17 00:00:00 2001
From: 0x4kgi <0x4kgi@protonmail.com>
Date: Mon, 26 Oct 2020 09:36:57 +0800
Subject: [PATCH 112/156] Fix minor typo

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 55da5cec..3a913cb2 100644
--- a/README.md
+++ b/README.md
@@ -235,7 +235,7 @@ clarified that`t` is the last `t` in the sentence.
 In regular expressions, the meta character `?` makes the preceding character
 optional. This symbol matches zero or one instance of the preceding character.
 For example, the regular expression `[T]?he` means: Optional uppercase
-`T`, followed by a lowercase `h`, followed bya lowercase `e`.
+`T`, followed by a lowercase `h`, followed by a lowercase `e`.
 
 
 "[T]he" => The car is parked in the garage.

From a4028b6de7019e3c1a6695a65ff9b7abb961cf9f Mon Sep 17 00:00:00 2001
From: Zeeshan Ahmad 
Date: Mon, 14 Dec 2020 07:13:07 +0000
Subject: [PATCH 113/156] remove .github

---
 .github/FUNDING.yml | 2 --
 1 file changed, 2 deletions(-)
 delete mode 100644 .github/FUNDING.yml

diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 42e653b6..00000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-open_collective: learn-regex
-patreon: ziishaned

From e1e4ad83a2e414e81f501da53870d295809f97a1 Mon Sep 17 00:00:00 2001
From: mcantonbul <53213891+mcantonbul@users.noreply.github.com>
Date: Mon, 14 Dec 2020 14:36:46 +0300
Subject: [PATCH 114/156] Update README-tr.md

Fix wrong number on 2.4 Braces
---
 translations/README-tr.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-tr.md b/translations/README-tr.md
index 41be9dd9..da70f2f9 100644
--- a/translations/README-tr.md
+++ b/translations/README-tr.md
@@ -266,7 +266,7 @@ Düzenli ifadelerde miktar belirliyiciler olarakda bilinen süslü parantezler,
 karakterin veya karakter grubunun kaç defa tekrar edebileceğini belirtmek için
 kullanılırlar.
 
-Örneğin, `[0-9]{2,3}` ifadesinin anlamı: 0 ile 0 aralığındaki karakterlerden, en
+Örneğin, `[0-9]{2,3}` ifadesinin anlamı: 0 ile 9 aralığındaki karakterlerden, en
 az 2 en fazla 3 defa ile eşleş.
 
 

From 24be3ab783847dbd9fc285b005c4bd5214bd1385 Mon Sep 17 00:00:00 2001
From: mcantonbul <53213891+mcantonbul@users.noreply.github.com>
Date: Mon, 14 Dec 2020 14:53:57 +0300
Subject: [PATCH 115/156] Update README-tr.md

Add missing brackets for `Lookarounds` description.
---
 translations/README-tr.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-tr.md b/translations/README-tr.md
index 41be9dd9..4475ac53 100644
--- a/translations/README-tr.md
+++ b/translations/README-tr.md
@@ -444,7 +444,7 @@ Düzenli ifadelerde kullanılan bakınma sembolleri aşadaki gibidir:
 |?=|Positive Lookahead (Verdiğimiz ifade sonrası arar ve `eşleşme varsa` sonuç döndürür.)|
 |?!|Negative Lookahead (Verdiğimiz ifade sonrası arar ve `eşleşme yoksa` sonuç döndürür.)|
 |?<=|Positive Lookbehind (Verdiğimiz ifade öncesini arar ve `eşleşme varsa` sonuç döndürür.)|
-|?<-!-|Negative Lookbehind Verdiğimiz ifade öncesini arar ve `eşleşme yoksa` sonuç döndürür.|
+|?<-!-|Negative Lookbehind (Verdiğimiz ifade öncesini arar ve `eşleşme yoksa` sonuç döndürür.)|
 
 ### 4.1 Positive Lookahead
 

From 8002f6d9d4c75b93a18e3599dff606ec604c333a Mon Sep 17 00:00:00 2001
From: Citrodata <39993466+Citrodata@users.noreply.github.com>
Date: Wed, 16 Dec 2020 07:18:24 +0100
Subject: [PATCH 116/156] Update README-de.md

---
 translations/README-de.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-de.md b/translations/README-de.md
index b888c806..15c2f432 100644
--- a/translations/README-de.md
+++ b/translations/README-de.md
@@ -38,7 +38,7 @@ wir die Anzahl der Zeichen limitieren, damit der Name nicht unlesbar wird. Dazu
   Regular expression
 

-Der abgebildete reguläre Ausdruck erlaubt bspw. die Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Der Eingabe `Jo` wird nicht akzeptiert, da sie einen Großbuchstaben enthält und zu kurz ist. +Der abgebildete reguläre Ausdruck erlaubt bspw. Die Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Die Eingabe `Jo` wird nicht akzeptiert, weil sie einen Großbuchstaben enthält und zu kurz ist. ## Inhaltsverzeichnis From bc7437ae5cc0b9ee046734c9372ff34b09bf8296 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Wed, 23 Dec 2020 18:37:14 +0400 Subject: [PATCH 117/156] Add download the guide as pdf button --- README.md | 2 ++ translations/README-cn.md | 2 ++ translations/README-de.md | 2 ++ translations/README-es.md | 2 ++ translations/README-fa.md | 3 +++ translations/README-fr.md | 2 ++ translations/README-gr.md | 2 ++ translations/README-hu.md | 2 ++ translations/README-ja.md | 2 ++ translations/README-ko.md | 2 ++ translations/README-pl.md | 2 ++ translations/README-pt_BR.md | 2 ++ translations/README-ru.md | 2 ++ translations/README-tr.md | 2 ++ translations/README-vn.md | 2 ++ translations/README-zh-simple.md | 2 ++ 16 files changed, 33 insertions(+) diff --git a/README.md b/README.md index 55da5cec..2412c131 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ ## What is Regular Expression? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > A regular expression is a group of characters or symbols which is used to find a specific pattern in a text. A regular expression is a pattern that is matched against a subject string from diff --git a/translations/README-cn.md b/translations/README-cn.md index 977e8134..c29158a7 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -34,6 +34,8 @@ ## 什么是正则表达式? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。 一个正则表达式是一种从左到右匹配主体字符串的模式。 diff --git a/translations/README-de.md b/translations/README-de.md index b888c806..c2c179fc 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -24,6 +24,8 @@ ## Was sind Reguläre Ausdrücke? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > Ein regulärer Ausdruck ist eine Gruppe von Buchstaben und Symbolen, die benutzt werden um ein bestimmtes Muster in einem Text zu finden. Ein regulärer Ausdruch ist ein Muster, das mit einem zu durchsuchenden Text von links nach rechts abgeglichen wird. Die Bezeichnung "Regulärer Ausdruck" ist in der Praxis unüblich und stattdessen wird häufig die Englische Abkürzung "Regex" oder "RegExp" (*regular expression*) verwendet. Reguläre diff --git a/translations/README-es.md b/translations/README-es.md index 366b209e..907f9a1a 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -34,6 +34,8 @@ ## Qué es una expresión regular? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > 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 utilizan para reemplazar 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. diff --git a/translations/README-fa.md b/translations/README-fa.md index c95869a8..5595d455 100644 --- a/translations/README-fa.md +++ b/translations/README-fa.md @@ -35,6 +35,9 @@ ## عبارت منظم چیست؟ + +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) +
> عبارت منظم یک گروه از کارکترها یا نمادهاست که برای پیدا کردن یک الگوی مشخص در یک متن به کار گرفته می شود. diff --git a/translations/README-fr.md b/translations/README-fr.md index c51668cc..46016160 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -34,6 +34,8 @@ ## Qu'est-ce qu'une expression régulière? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > Une expression régulière est un groupement de caractères ou symboles utilisés pour trouver un schéma spécifique dans un texte. Une expression régulière est un schéma qui est comparé à une chaîne de caractères (string) de gauche à droite. Le mot "Expression régulière" diff --git a/translations/README-gr.md b/translations/README-gr.md index 2e6dd9d9..763bd8f9 100644 --- a/translations/README-gr.md +++ b/translations/README-gr.md @@ -34,6 +34,8 @@ ## Τι είναι μια Κανονική Έκφραση (Regular Expression); +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > Μια κανονική έκφραση είναι μια ομάδα χαρακτήρων ή συμβόλων που χρησιμοποιούνται για την εύρεση ενός συγκεκριμένου μοτίβου χαρακτήρων μέσα σ'ένα κείμενο. Μια κανονική έκφραση, είναι μια σειρά χαρακτήρων τους οποίους αναζητούμε μέσα σε ένα κείμενο. Η αναζήτηση αυτή diff --git a/translations/README-hu.md b/translations/README-hu.md index e8c52394..16a6804e 100644 --- a/translations/README-hu.md +++ b/translations/README-hu.md @@ -34,6 +34,8 @@ ## Mi az a reguláris kifejezés? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > A reguláris kifejezés karakterek vagy szimbólumok egy csoportja, amelyet egy szövegből adott minták megtalálására használnak. A reguláris kifejezés egy olyan minta, amely illeszkedik egy adott karakterláncra diff --git a/translations/README-ja.md b/translations/README-ja.md index 6acf9ae4..308b6391 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -34,6 +34,8 @@ ## 正規表現とは +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > 正規表現とは文中からある文字列のパターンを見つけるために使用される文字列や記号の組み合わせのことです。 正規表現とは対象の文字列に左から右にマッチするパターンのことを言います。 diff --git a/translations/README-ko.md b/translations/README-ko.md index 6d294956..e210de48 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -34,6 +34,8 @@ ## 정규표현식이란 무엇인가? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > 정규표현식은 텍스트에서 특정 패턴을 찾아내는데 사용되는 문자 혹은 기호들의 집합이다. 정규표현식(Regular expression)은 대상 문자열에 왼쪽에서 오른쪽 방향으로 매칭되는 하나의 패턴이다. "Regular expression"이라고 매번 발음하기 어렵기 때문에, 보통 약어로 "regex" 혹은 "regexp", "정규식"으로 축약되어 사용된다. 정규 표현식은 문자열 내부의 텍스트 대체, 포맷의 유효성 검사, 패턴 매칭을 기반으로한 문자열에서 일부 텍스트를 추출, 그리고 그 외에 다양한 목적을 위해 사용된다. diff --git a/translations/README-pl.md b/translations/README-pl.md index fd1d04ca..13f1e9a0 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -34,6 +34,8 @@ ## Co to jest wyrażenie regularne? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > Wyrażenie regularne to grupa znaków lub symboli, które służą do odnalezienia określonego wzoru w tekście. Wyrażenie regularne to wzorzec, który jest dopasowywany do tekstu od lewej diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md index 1c8e474a..68db0e19 100644 --- a/translations/README-pt_BR.md +++ b/translations/README-pt_BR.md @@ -34,6 +34,8 @@ ## O que é uma Expressão Regular? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > Expressão Regular é um grupo de caracteres ou símbolos utilizado para encontrar um padrão específico a partir de um texto. Uma expressão regular é um padrão que é comparado com uma cadeia de caracteres da esquerda para a direita. O termo "Expressão regular" é longo e difícil de falar; você geralmente vai encontrar o termo abreviado como "regex" ou "regexp". Expressões regulares são usadas para substituir um texto dentro de uma string, validar formulários, extrair uma parte de uma string baseada em um padrão encontrado e muito mais. diff --git a/translations/README-ru.md b/translations/README-ru.md index 614d9ebf..d76116c5 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -33,6 +33,8 @@ ## Что такое Регулярное выражение? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте. Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. diff --git a/translations/README-tr.md b/translations/README-tr.md index 41be9dd9..f3a3967e 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -34,6 +34,8 @@ ## Düzenli İfade Nedir? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > Düzenli ifade, bir metinden belirli bir deseni bulmak için kullanılan bir karakter veya sembol grubudur. Bir düzenli ifade soldan sağa söz konusu harf öbekleriyle eşleşen bir desendir. diff --git a/translations/README-vn.md b/translations/README-vn.md index 0c38faa2..c6d15f87 100644 --- a/translations/README-vn.md +++ b/translations/README-vn.md @@ -36,6 +36,8 @@ ## Biểu thức chính quy là gì? +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) + > Biểu thức chính quy là một nhóm các ký tự hoặc ký hiệu được sử dụng để tìm một mẫu cụ thể từ một văn bản. Biểu thức chính quy là một khuôn mẫu được khớp với chuỗi các từ, từ trái sang phải. Từ "Biểu thức chính quy" là một câu cửa miệng, bạn thường sẽ tìm thấy thuật ngữ viết tắt là "regex" hoặc "regexp". Biểu thức chính quy được sử dụng để thay thế một văn bản trong một chuỗi, xác thực mẫu, trích xuất một chuỗi con từ một chuỗi dựa trên khớp mẫu và hơn thế nữa. diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index 292e8778..f591052a 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -32,6 +32,8 @@ * [فارسی](../translations/README-fa.md) ## 什么是正则表达式? + +[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) > 正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子. From fc31f33b49a061ead9a00344569a496c20488582 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Fri, 22 Jan 2021 18:57:44 +0400 Subject: [PATCH 118/156] Update README.md --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c5c4f041..89915466 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,13 @@


- - Learn Regex + + Download PDF + + + + +

From af59a7900f62ebd8d2799bbad66a10efc2c6e4df Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Fri, 22 Jan 2021 18:59:08 +0400 Subject: [PATCH 119/156] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 89915466..c1a375fa 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@


+
+ Learn Regex + + +
Download PDF - - - -

From dde1ed1a34432ccdfbf016766a3fdc91b3527d56 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Fri, 22 Jan 2021 19:02:20 +0400 Subject: [PATCH 120/156] Update README.md --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c1a375fa..2b577497 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,23 @@


- Learn Regex - - -
+ Learn Regex + +

+
+

Download PDF +

-

-

- - - - - - -

+

+ + + + + +

## Translations: From bace74c087c06e05e8f80806f38e8fc13b3ec0e6 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Fri, 22 Jan 2021 19:03:54 +0400 Subject: [PATCH 121/156] Update README.md --- README.md | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 2b577497..2d37abd9 100644 --- a/README.md +++ b/README.md @@ -5,20 +5,10 @@


-

- - Download PDF - -

+ + Download PDF + -

- - - - - - -

## Translations: From de27b744cc68d5dffa390c958846e69de9c51848 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Fri, 22 Jan 2021 19:05:29 +0400 Subject: [PATCH 122/156] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 2d37abd9..ee4b84ea 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,6 @@ ## What is Regular Expression? -[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) - > A regular expression is a group of characters or symbols which is used to find a specific pattern in a text. A regular expression is a pattern that is matched against a subject string from From 5d56ad1e8b736e39fe4c04f5ae011e8e4fb7f6cb Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sun, 24 Jan 2021 21:20:49 +0400 Subject: [PATCH 123/156] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ee4b84ea..8dcd5c7f 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,6 @@ Learn Regex

-
- - Download PDF - ## Translations: @@ -30,6 +26,10 @@ ## What is Regular Expression? + + Download PDF + + > A regular expression is a group of characters or symbols which is used to find a specific pattern in a text. A regular expression is a pattern that is matched against a subject string from From d6c5519e1989cd1edef9f436aaaceb0fba7c2f52 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sun, 24 Jan 2021 21:22:04 +0400 Subject: [PATCH 124/156] Update README.md --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8dcd5c7f..fb0753a7 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,11 @@ ## What is Regular Expression? - - Download PDF - +

+ + Download PDF + +

> A regular expression is a group of characters or symbols which is used to find a specific pattern in a text. From 6f4fd0660d762b5214f51445137956821c53ce94 Mon Sep 17 00:00:00 2001 From: edte Date: Thu, 15 Apr 2021 19:25:15 +0800 Subject: [PATCH 125/156] fix a zh translation typo --- translations/README-zh-simple.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index f591052a..a8df3c08 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -300,7 +300,7 @@ `^` 用来检查匹配的字符串是否在所匹配字符串的开头. -例如, 在 `abc` 中使用表达式 `^a` 会得到结果 `a`. 但如果使用 `^b` 将匹配不到任何结果. 应为在字符串 `abc` 中并不是以 `b` 开头. +例如, 在 `abc` 中使用表达式 `^a` 会得到结果 `a`. 但如果使用 `^b` 将匹配不到任何结果. 因为在字符串 `abc` 中并不是以 `b` 开头. 例如, `^(T|t)he` 匹配以 `The` 或 `the` 开头的字符串. From 9498781445347c1550af7f4cf9f61f091e6e7b7b Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 1 May 2021 11:25:57 +0400 Subject: [PATCH 126/156] update readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fb0753a7..34ef8d6b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +Buy Me A Coffee +


From e8afa6111029bec5229150e49b772dd6c61a38c2 Mon Sep 17 00:00:00 2001 From: Erick Lara Cardenas Date: Fri, 14 May 2021 21:34:06 -0700 Subject: [PATCH 127/156] Fix spanish links, typos and context --- translations/README-es.md | 81 +++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/translations/README-es.md b/translations/README-es.md index 907f9a1a..5e9c3edf 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -38,10 +38,9 @@ > 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 utilizan para reemplazar 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 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. +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 reemplazar 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 un patrón, y muchas cosas más. +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, guion bajo (raya), y guion 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.

@@ -59,25 +58,25 @@ La expresión regular anterior puede aceptar las cadenas `john_doe`, `jo-hn_doe` - [Conjunto de caracteres negados](#221-conjunto-de-caracteres-negado) - [Repeticiones](#23-repeticiones) - [Asterisco](#231-asterisco) - - [Signo más](#232-signo-mas) - - [Signo de interrogación](#233-signo-de-pregunta) + - [Signo más](#232-signo-de-más) + - [Signo de interrogación](#233-signo-de-interrogación) - [Llaves](#24-llaves) - - [Grupo de caracteres](#25-grupo-de-caracteres) - - [Alternancia](#26-alternacia) + - [Grupos de caracteres](#25-grupos-de-caracteres) + - [Alternancia](#26-alternancia) - [Caracteres especiales de escape](#27-caracteres-especiales-de-escape) - [Anclas](#28-anclas) - - [Símbolo de intercalación](#281-simbolo-de-intercalacion) - - [Símbolo del dólar](#282-simbolo-dolar) + - [Símbolo de intercalación](#281-símbolo-de-intercalación) + - [Símbolo del dólar](#282-símbolo-del-dólar) - [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) + - [Mirar hacia delante positivo](#41-mirar-hacia-adelate-positivo) + - [Mirar hacia delante negativo](#42-mirar-hacia-delaten-negativo) + - [Mirar hacia atrás positivo](#43-mirar-hacia-atras-positivo) + - [Mirar hacia atrás negativo](#44-mirar-hacia-atras-negativo) - [Indicadores](#5-indicadores) - - [Mayúsculas y minúsculas](#51-mayusculas-y-minusculas) - - [Búsqueda global](#52-busqueda-global) - - [Multilínea](#53-multilinea) + - [Mayúsculas y minúsculas](#51-mayúsculas-y-minúsculas) + - [Búsqueda global](#52-búsqueda-global) + - [Multilínea](#53-multilínea) ## 1. Introducción @@ -100,22 +99,22 @@ La expresión regular `123` coincide con la cadena `123`. La expresión regular ## 2. Meta-caracteres -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: +Los meta-caracteres son los bloques de construcción de las expresiones regulares. Los meta-caracteres no se trabajan por 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-carácter|Descripción| |:----:|----| -|.|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 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 carácter. Esto le permite hacer coincidir los caracteres reservados [ ] ( ) { } . * + ? ^ $ \ || -|^|Hace coincidir el principio de la entrada.| -|$|Corresponde al final de la entrada.| +|.|Punto: 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.| +|*|Asterisco: Corresponde con 0 o más repeticiones del símbolo precedente.| +|+|Signo de más: Corresponde con 1 o más repeticiones del símbolo precedente.| +|?|Signo de interrogación: 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 de caracter: 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 carácter: Esto le permite hacer coincidir los caracteres reservados [ ] ( ) { } . * + ? ^ $ \ || +|^|Acento circunflejo: Hace coincidir el principio de la entrada.| +|$|Símbolo de dólar: Corresponde al final de la entrada.| ## 2.1 Full stop @@ -129,7 +128,7 @@ Full stop `.` es el ejemplo más simple del meta-carácter. El meta-carácter `. ## 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: un carácter en mayúscula `T` o minúscula `t`, seguido del carácter `h`, seguido del carácter `e`. +Los conjuntos de caracteres también se llaman clase de caracteres. Los corchetes se utilizan para especificar conjuntos de caracteres. Utilice un guion 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`.

 "[Tt]he" => The car parked in the garage.
@@ -161,7 +160,7 @@ Los siguientes caracteres meta `+`, `*` o `?`, se utilizan para especificar cuá
 
 ### 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.
+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.
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -177,7 +176,7 @@ El símbolo `*` se puede utilizar con el meta-carácter `.` para que coincida co
 
 [Prueba la expresión regular](https://regex101.com/r/gGrwuz/1)
 
-### 2.3.2 Signo más
+### 2.3.2 Signo de 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: carácter en minúscula `c`, seguido por lo menos de un carácter, luego el carácter en minúscula `t`.
 
@@ -305,10 +304,10 @@ regulares de uso común. Los conjuntos de caracteres abreviados son los siguient
 |.|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]`|
-|\D|Coincide con no dígitos: `[^\d]`|
-|\s|Coincide con caracteres espaciales: `[\t\n\f\r\p{Z}]`|
-|\S|Coincide con caracteres no espaciales: `[^\s]`|
+|\d|Coincide con los dígitos: `[0-9]`|
+|\D|Coincide con los no dígitos: `[^\d]`|
+|\s|Coincide con los caracteres espaciales: `[\t\n\f\r\p{Z}]`|
+|\S|Coincide con los caracteres no espaciales: `[^\s]`|
 
 ## 4. Mirar alrededor
 
@@ -330,7 +329,7 @@ que se utilizan en expresiones regulares:
 |?<=|Lookbehind Positivo|
 |?<\!|Lookbehind Negativo|
 
-## 4.1 Mirar hacia adelate positiva
+## 4.1 Mirar hacia adelate positivo
 
 El lookahead positivo afirma que la primera parte de la expresión debe ser
 seguida por la expresión lookahead. La coincidencia devuelta sólo contiene el texto que
@@ -349,7 +348,7 @@ de expresión regular que coincida con `The` o `the` seguido de la palabra `fat`
 
 [Prueba la expresión regular](https://regex101.com/r/IDDARt/1)
 
-### 4.2 Mirar hacia adelate negativa
+### 4.2 Mirar hacia adelate negativo
 
 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
@@ -365,7 +364,7 @@ que significa: obtener todas las `The` o `the` seguidos por la palabra `fat` pre
 
 [Prueba la expresión](https://regex101.com/r/V32Npg/1)
 
-### 4.3 Mirar hacia atras positiva
+### 4.3 Mirar hacia atras positivo
 
 Positivo lookbehind se utiliza para obtener todos los caracteres que están precedidos
 por un patrón específico. La apariencia positiva se denotar por `(?<=...)`.
@@ -378,7 +377,7 @@ Por ejemplo, la expresión regular `(? <= [T|t]he\s)(fat|mat)` significa: obtene
 
 [Prueba la expresión regular](https://regex101.com/r/avH165/1)
 
-### 4.4 Mirar hacia atras negativa
+### 4.4 Mirar hacia atras negativo
 
 El lookbehind negativo se utiliza para obtener todas las coincidencias que no
 están precedidas por un patrón específico. El lookbehind negativo se denota por
@@ -405,7 +404,7 @@ o combinación, y son una parte integral de RegExp.
 |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
+### 5.1 Mayúsculas y minúsculas
 
 El modificador `i` se utiliza para realizar la coincidencia entre mayúsculas y
 minúsculas. Por ejemplo, la expresión regular `/The/gi` significa: carácter en mayúscula

From 26943d3ba2629eaa2adab45f1fad9dcc3107a05c Mon Sep 17 00:00:00 2001
From: Sezer Esim 
Date: Fri, 28 May 2021 00:36:41 +0300
Subject: [PATCH 128/156] section 6 ,2.5.1 added and fixed some translate issue

---
 translations/README-tr.md | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/translations/README-tr.md b/translations/README-tr.md
index f3a3967e..b0a412fe 100644
--- a/translations/README-tr.md
+++ b/translations/README-tr.md
@@ -73,6 +73,7 @@ Yukardaki düzenli ifade `john_doe`, `jo-hn_doe` ve `john12_as` gibi girişleri
     - [Soru İşareti](#233-soru-İşareti)
   - [Süslü Parantez](#24-süslü-parantez)
   - [Karakter Grubu](#25-karakter-grubu)
+      - [Karakter Grubu Olmayanlar](#251-karakter-grubu-olmayanlar)
   - [Değişim](#26-değişim)
   - [Özel Karakter Hariç Tutma](#27-Özel-karakter-hariç-tutma)
   - [Sabitleyiciler](#28-sabitleyiciler)
@@ -88,7 +89,7 @@ Yukardaki düzenli ifade `john_doe`, `jo-hn_doe` ve `john12_as` gibi girişleri
   - [Büyük/Küçük harf duyarlılığı](#51-büyükküçük-harf-duyarlılığı)
   - [Bütünsel Arama](#52-genel-arama)
   - [Çok satırlı](#53-Çok-satırlı)
-
+- [Açgözlü vs Tembel Eşleştirme](#6-açgözlü-vs-tembel-eşleştirme)
 ## 1. Temel Eşleştiriciler
 
 Bir düzenli ifade bir metin içinde arama yapabilmek için kullandığımız bir karakter desenidir.
@@ -268,7 +269,7 @@ Düzenli ifadelerde miktar belirliyiciler olarakda bilinen süslü parantezler,
 karakterin veya karakter grubunun kaç defa tekrar edebileceğini belirtmek için
 kullanılırlar.
 
-Örneğin, `[0-9]{2,3}` ifadesinin anlamı: 0 ile 0 aralığındaki karakterlerden, en
+Örneğin, `[0-9]{2,3}` ifadesinin anlamı: 0 ile 9 aralığındaki karakterlerden, en
 az 2 en fazla 3 defa ile eşleş.
 
 
@@ -315,6 +316,21 @@ karakteri, ardından `a` karakteri, ardından `r` karakteri gelir.
 
 [Düzenli ifadeyi test edin](https://regex101.com/r/tUxrBG/1)
 
+Not olarak yakalanan gruplar yalnızca eşleşmez, ayrıca yakalanan karakterler ana dil içinde kullanılır.Bu ana dil Python,JavaScript ve neredeyse herhangi bir dilde düzenli ifadelerin fonksiyon tanımlamalarında olabilir.
+
+### 2.5.1 Karakter Grubu Olmayanlar
+
+Karakter grubu olmayan bir grup, karakterlerle eşleşen ancak grubu yakalayamayan bir yakalama grubudur. Karakter grubu olmayan bir grup parantez içinde`(...)` önce `?` ve ardından `:` ile gösterilir. Örneğin, `(?:c|g|p)ar` düzenli ifadesi, aynı karakterlerle eşleştiği ancak bir yakalama grubu oluşturmayacağı için `(c|g|p)ar` ifadesine benzer.
+
+
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Düzenli ifadeyi test edin](https://regex101.com/r/Rm7Me8/1) + +Karakter grubu olmayanlar bul-ve-değiştir işlevselliğinde kullanıldığında veya karakter gruplarıyla karıştırıldığında, herhangi bir başka tür çıktı üretirken genel görünümü korumak için kullanışlı olabilir. +Ayrıca bakınız [4. Bakınmak](#4-bakınmak). + ## 2.6 Değişim Düzenli ifadede dik çizgi alternasyon(değişim, dönüşüm) tanımlamak için @@ -592,6 +608,21 @@ eşleştirir. [Düzenli ifadeyi test edin](https://regex101.com/r/E88WE2/1) +## 6. Açgözlü vs Tembel Eşleştirme + +Varsayılan olarak, bir düzenli ifade açgözlü bir eşleştirme yapacaktır, bu da eşleşmenin mümkün olduğu kadar çok olacağı anlamına gelir. Tembel bir şekilde eşleştirmek için `?` kullanabiliriz, bu da eşleşme olabildiğince kısa olacaktır. +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Düzenli ifadeyi test edin](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[Düzenli ifadeyi test edin](https://regex101.com/r/AyAdgJ/2) + ## Contribution * Report issues From 8ef3f8402e08488d11f8140d640f5624b38e74ae Mon Sep 17 00:00:00 2001 From: Ciprian Date: Tue, 17 Aug 2021 12:14:55 +0300 Subject: [PATCH 129/156] Fixed typo for en translation in section 4.1 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 34ef8d6b..223e6a2d 100644 --- a/README.md +++ b/README.md @@ -421,7 +421,7 @@ regular expressions: Lookbehinds and lookaheads (also called lookarounds) are specific types of ***non-capturing groups*** (used to match a pattern but without including it in the matching -list). Lookarounds are used when we a pattern must be +list). Lookarounds are used when a pattern must be preceded or followed by another pattern. For example, imagine we want to get all numbers that are preceded by the `$` character from the string `$4.44 and $10.88`. We will use the following regular expression `(?<=\$)[0-9\.]*` From bd2d95b3511d9b0c938631c27da46f2c93bb0ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sun, 3 Oct 2021 15:17:23 +0300 Subject: [PATCH 130/156] Fix typo in decription of dot character on Turkish --- translations/README-tr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-tr.md b/translations/README-tr.md index f3a3967e..f9d82262 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -121,7 +121,7 @@ Meta karakterler aşağıdaki gibidir: |Meta karakter|Açıklama| |:----:|----| -|.|Satır sonuç hariç herhangi bir karakterle eşleşir.| +|.|Satır başlangıcı hariç herhangi bir karakterle eşleşir.| |[ ]|Köşeli parantezler arasında bulunan herhangi bir karakterle eşleşir.| |[^ ]|Köşeli parantez içerisinde yer alan `^` işaretinden sonra girilen karakterler haricindeki karakterlerle eşleşir.| |*|Kendisinden önce yazılan karakterin sıfır veya daha fazla tekrarı ile eşleşir.| From bcc9b0079d5c825d05d8d8d7b81c79e55b4a5779 Mon Sep 17 00:00:00 2001 From: Thiago May Date: Tue, 5 Oct 2021 20:09:22 -0300 Subject: [PATCH 131/156] Add chapter six translation to Portuguese --- translations/README-pt_BR.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md index 68db0e19..58dfe3bf 100644 --- a/translations/README-pt_BR.md +++ b/translations/README-pt_BR.md @@ -78,6 +78,7 @@ A expressão regular acima aceita as strings `john_doe`, `jo-hn_doe` e `john12_a - [Indiferente à Maiúsculas](#51-indiferente-à-maiúsculas) - [Busca Global](#52-busca-global) - [Multilinhas](#53-multilinhas) +- [Guloso vs Não-Guloso](#6-guloso-vs-não-guloso) ## 1. Combinações Básicas @@ -420,6 +421,23 @@ O modificador `m` é usado para realizar uma busca em várias linhas. Como falam [Teste a RegExp](https://regex101.com/r/E88WE2/1) +### 6. Guloso vs Não-Guloso + +Por padrão, uma regex irá realizar uma consulta gulosa, isto significa que a busca irá capturar ao padrão mais longo possível. Nós podemos usar `?` para buscar de uma forma não-gulosa, isto significa que a busca irá capturar ao padrão mais curto possível. + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Teste a RegExp](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[Teste a RegExp](https://regex101.com/r/AyAdgJ/2) + + ## Contribution * Reporte bugs From 365cea3690fadc9e2b419ecb0567d78bb646a921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Thu, 14 Oct 2021 01:37:24 +0300 Subject: [PATCH 132/156] Fix typo on Turkish README --- translations/README-tr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-tr.md b/translations/README-tr.md index f3a3967e..5dd0f2d9 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -149,7 +149,7 @@ gelir. ## 2.2 Karakter Takımı -Karakter takımları aryıca Karakter sınıfı olarak bilinir. Karakter takımlarını +Karakter takımları ayrıca Karakter sınıfı olarak bilinir. Karakter takımlarını belirtmek için köşeli ayraçlar kullanılır. Karakterin aralığını belirtmek için bir karakter takımında tire kullanın. Köşeli parantezlerdeki karakter aralığının sıralaması önemli değildir. From 823ba4869cf7889d420d277db4bacc7f6e6defa9 Mon Sep 17 00:00:00 2001 From: Recurduck Greco Date: Sat, 16 Oct 2021 02:50:27 +0300 Subject: [PATCH 133/156] Add hebrew translation --- img/regexp-he.png | Bin 0 -> 14036 bytes translations/README-he.md | 577 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 577 insertions(+) create mode 100644 img/regexp-he.png create mode 100644 translations/README-he.md diff --git a/img/regexp-he.png b/img/regexp-he.png new file mode 100644 index 0000000000000000000000000000000000000000..c09457ed8ebd7ce9790b239e38a00adef191f88b GIT binary patch literal 14036 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%0DU0Zlr8h8nWGallRY5^yV*lWc_GoTWp~c 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 MF}huT)A8y50MQ@}e*gdg literal 0 HcmV?d00001 diff --git a/translations/README-he.md b/translations/README-he.md new file mode 100644 index 00000000..f8ec8537 --- /dev/null +++ b/translations/README-he.md @@ -0,0 +1,577 @@ +

+
+
+ Learn Regex + +

+ +
+ +## תרגומים: + +* [English](README.md) +* [German](translations/README-de.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) +* [Русский](translations/README-ru.md) +* [Tiếng Việt](translations/README-vn.md) +* [فارسی](translations/README-fa.md) +* [עברית](translations/README-he.md) + +## מה זה ביטוי רגולרי? + +

+ + הורד PDF + +

+ +> ביטוי רגולרי (regular expression) הוא קבוצת תוים או סימנים אשר משמשים למציאת תבנית ספציפית בתוך טקסט. + +ביטוי רגולרי הוא תבנית המתאימה את עצמה לנושא במחרוזת משמאל לימין. +ביטויים רגולרים משמשים להחלפת טקסט בתוך מחרוזת, אימות טפסים, +חילוץ מחרוזת משנית ממחרוזת ראשית על בסיס התבנית המתאימה, ועוד. +המונח "Regular expression" (ביטוי רגולרי) הוא יחסית ארוך ולכן בדרך כלל +נמצא את המונח מקוצר ל-"regex" או "regexp". + +תדמיין.י שאת.ה כותב.ת אפליקציה ואת.ה רוצה להציב חוקים למצב בו המשתמש בוחר את +שם המשתמש. אנחנו רוצים לאפשר לשם המשתמש להכיל אותיות, מספרים, קוים תחתונים ומקפים. +בנוסף נרצה גם להגביל את מספר התוים בשם המשתמש בכדי שלא יראה מכוער. +נוכל להשתמש בביטוי הרגולרי הבא בכדי לאמת את שם המשתמש: + +

+ +

+ Regular expression +

+ +הביטוי הרגולרי למעלה יכול לאשר את המחרוזות `john_doe`, `jo-hn_doe` +ו-`john12_as`. אך הוא לא יתאים למחרוזת `Jo` בגלל שמחרוזת זו מכילה אות גדולה + ובנוסף לכך היא קצרה מדי (פחות משלושה תוים). + +## תוכן עניינים + +- [התאמות בסיסיות](#1-התאמות-בסיסיות) +- [תווי-מטא](#2-תווי-מטא) + - [עצירה מלאה](#21-עצירה-מלאה) + - [מערכות תוים](#22-מערכות-תוים) + - [מערכות תוים שליליות](#221-מערכות-תוים-שליליות) + - [חזרות](#23-חזרות) + - [הכוכבית](#231-הכוכבית) + - [הפלוס](#232-הפלוס) + - [סימן השאלה](#233-סימן-השאלה) + - [סוגרים מסולסלים](#24-סוגרים-מסולסלים) + - [קבוצות לכידה](#25-קבוצות-לכידה) + - [קבוצות שאינן לוכדות](#251-קבוצות-שאינן-לוכדות) + - [חלופה](#26-חלופה) + - [התעלמות מתווים מיוחדים](#27-התעלמות-מתווים-מיוחדים) + - [עוגנים](#28-עוגנים) + - [ה-"קרט"](#281-ה-"קרט") + - [סימן הדולר](#282-סימן-הדולר) +- [קיצורי מערכות תווים](#3-קיצורי-מערכות-תווים) +- [הסתכלויות](#4-הסתכלויות) + - [מבט קדימה חיובי](#41-מבט-קדימה-חיובי) + - [מבט קדימה שלילי](#42-מבט-קדימה-שלילי) + - [מבט אחורה חיובי](#43-מבט-אחורה-חיובי) + - [מבט אחורה שלילי](#44-מבט-אחורה-שלילי) +- [דגלים](#5-דגלים) + - [חוסר רגישות לאותיות](#51-חוסר-רגישות-לאותיות) + - [חיפוש גלובלי](#52-חיפוש-גלובלי) + - [רב-שורות](#53-רב-שורות) +- [התאמה חמדנית מול עצלה](#6-התאמה-חמדנית-מול-עצלה) + +## 1. התאמות בסיסיות + +ביטוי רגולרי הוא בסף הכל תבנית של תוים שאנו משתמשים בהם בכדי לבצע חיפוש +בתוך הטקסט. לדוגמא, הביטוי הרגולרי `the` פירושו: האות `t`, ואחריה האות `h`, ואחריה האות `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/dmRygT/1) + +הביטוי הרגולרי `123` מתאים למחרוזת `123`. הביטוי הרגולרי מותאם למחרוזת קלט על ידי השוואת כל תו +בביטוי הרגולרי לכל תו במחרוזת הקלט, אחד אחרי השני. ביטויים רגולרים לרוב יהיו +תלויי אותיות קטנות או גדולות כך שהביטוי הרגולרי `The` לא יתאים למחרוזת `the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/1paXsy/1) + +## 2. תווי-מטא + +תווי-מטא אלו הם אבני הבניין של ביטויים רגולרים. תווי-מטא לא מסמלים את עצמם, אלא מתפרשים באופן מיוחד. +לכמה תווי-מטא יש משמעויות מיוחדות והם נכתבים בתוך סוגריים מרובעים. +תווי-המטא הם כדלקמן: + +|תווי-מטא|תיאור| +|:----:|----| +|.|נקודה תואמת כל תו בודד למעט שבירת שורות.| +|[ ]|מחלקת תווים. תואם כל תו הכלול בין הסוגריים המרובעים.| +|[^ ]|מחלקת תווים שלילית. תואם כל תו שאינו כלול בין הסוגריים המרובעים| +|*|תואם 0 או יותר חזרות של הסמל הקודם.| +|+|תואם חזרה אחת או יותר של הסמל הקודם.| +|?|הופך את הסמל הקודם לאופציונלי.| +|{n,m}|סוגריים מסולסלים. תואם לפחות חזרות "n" אך לא יותר מ- "m" של הסמל הקודם.| +|(xyz)|קבוצת תווים. תואם את התווים xyz בסדר המדויק הזה.| +|||חלופה (או). התאמה בין התווים שלפני או לתווים שאחרי הסמל.| +|\|מתעלם מהתו הבא. זה מאפשר לך להתאים תווים שמורים [ ] ( ) { } . * + ? ^ $ \ || +|^|תואם את תחילת הקלט.| +|$|תואם את סוף הקלט.| + +## 2.1 עצירה מלאה + +עצירה מלאה `.` היר דוגמא פשוטה לשימוש בתו-מטא. תו-המטא `.` מתאים לכל תו בודד. הוא לא יתאים +לתו return (\r) או לתו newline (\n). למשל, הביטוי הרגולרי `.ar` פירושו: כל תו, שאחריו האות `a`, ואחריה האות `r`. + +
+".ar" => The car parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/xc9GkU/1) + +## 2.2 מערכות תוים + +מערכות תוים נקראים גם מחלקות תוים. סוגריים מרובעים משמשים לציון מערכות תוים. +השתמש במקף בתוך ערכת התוים בכדי לציין את טווח התוים. סדר טווח התוים לא משנה. +לדוגמא, הביטוי הרגולרי `[Tt]he` פירושו: אות גדולה +`T` או אות קטנה `t`, שאחריה מופיעה האות `h`, ואחריה מופיעה האות `e`. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/2ITLQ4/1) + +נקודה בתוך ערכת התוים בשונה מבחוץ תחשב כתו נקודה. הביטוי הרגולרי +`ar[.]` פירושו: תו האות הקטנה `a`, שאחריו האות `r`, +ואחריה התו נקודה `.`. + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 מערכות תוים שליליות + +באופן כללי, הסימן "קרט"(גג) מייצג את תחילתה של מחרוזת, אך במידה והוא מוקלד לאחר סוגר מרובע פותח, +הוא שולל את מערכת ההתוים שיהיו תחת אותם סוגרים. לדוגמא, הביטוי הרגולרי `[^c]ar` פירושו: כל תו חוץ מ-`c`, +שלאחריו יופיע התו `a`, שאחריו יופיע התו `r`. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/nNNlq3/1) + +## 2.3 חזרות + +תווי-המטא `+`, `*` או `?` משמשים לציון כמה פעמים דפוסי משני יכולים להתרחש. +תווי-מטא אלו פועלים אחרת במצבים שונים. + +### 2.3.1 הכוכבית + +הסימן - `*` תואם אפס או יותר חזרות של המתאם הקודם. הביטוי הרגולרי `a*` פירושו: +אפס או יותר חזרות של התו הקודם- `a`. אבל אם הכוכבית תופיע לאחר מערכת או מערך תוים אז +הוא ימצא את החזרות של מערכת התוים כולה. לדוגמא, הביטוי הרגולרי `[a-z]*` פירושו: +כל מספר של אותיות קטנות בשורה. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/7m8me5/1) + +הסימן - `*` יכול לשמש יחד עם התו-מטא `.` בכדי להתאים כל מחרוזת תוים `.*`. +הסימון - `*` יכול לשמש יחד עם התו רווח - `\s` בכדי להתאים מחרוזת של תוי רווח. +לדוגמא, הביטוי `\s*cat\s*` פירושו: אפס או יותר רווחים, שאחריהם תופיעה האות הקטנה `c`, +שאחריה תופיע האות הקטנה `a`, ואחריה האות הקטנה `t`, ולבסוף אחריה יופיעו אפס או יותר תווי רווח. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 הפלוס + +הסימן `+` מתאים לאחת או יותר חזרות של התו הקודם לו. לדוגמא, הביטוי הרגולרי + `c.+t` פירושו: האות הקטנה - `c`, לאחריה לפחות תו אחד או יותר, + ואחריה האות הקטנה `t`. חשוב לציין שה - `t` יהיה התו `t` האחרון במשפט. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 סימן השאלה + +בביטוי רגולרי, התו-מטא `?` הופך את התו הקודם לאופציונלי, +סמל זה יתאים לאפס או יותר הופעות של אותו תו קודם. לדוגמא, הביטוי הרגולרי +`[T]?he` פירושו: אופציה לאות +`T` גדולה, ולאחריה אות קטנה `h`, ולאחריה תופיע האות - `e`. + +
+"[T]he" => The car is parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/kPpO2x/1) + +## 2.4 סוגרים מסולסלים + +בביטויים רגולרים, סוגרים מסולסלים (נקראים גם מכמתים) משמשים לציון +מספר הפעמים שניתן לחזור על תו או קבוצת תוים מסויימת. לדוגמא, הביטור הרגולרי + `[0-9]{2,3}` פירושו: התאם לפחות שתי ספרות, אבל לא יותר משלוש, בטווח שבין 0 ל-9 + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/juM86s/1) + +אנחנו יכולים לוותר על המספר השני בסוגרים המסולסלים. לדוגמא, בביטוי הרגולרי +`[0-9]{2,}` פירושו: התאמת שתי ספרות או יותר. בנוסף אם +נוריד את הפסיק, לדוגמא בביטוי הרגולרי `[0-9]{3}` פירושו: +התאם בדיוק שלוש ספרות. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/Sivu30/1) + +## 2.5 קבוצות לכידה + +קבוצה מלכדת היא קבוצה של תת-תבניות שנכתבות בתוך סוגריים רגילים `(...)` . +כפי שצויין קודם לכן, בביטוי רגולרי, אם נניח מכמת אחרי תו הוא יחזור על התו הקודם. +אבל אם נניח מכמת אחרי קבוצה מלכדת אז המכמת יתיחס לכל הקבוצה המלכדת. לדוגמא, הביטוי הרגולרי +`(ab)*` תואם אפס או יותר חזרות של המחרוזת "ab". אנחנו יכולים גם להשתמש +בתו-מטא `|` המשמש לבצע את הפעולה 'OR'(או) בתוך קבוצה מלכדת. +לדוגמא, הביטוי הרגולרי `(c|g|p)ar` פירושו: אות קטנה `c`, +`g` או `p`, שאחריהן תופיע האות `a`, ואחריה האות `r`. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/tUxrBG/1) + +יש לשים לב כי קבוצות מלכדות לא רק תואמות, אלא גם תופסות את התוים לשימוש בשפת האם. +שפת האם יכולה להיות Python או JavaScript או כמעט כל שפה שמיישמת ביטויים רגולרים +בבגדרת פונקציה. + +### 2.5.1 קבוצות שאינן לוכדות + +קבוצה שאינה מלכדת זוהי קבוצת לוכדת התואמת את התוים אבל לא תופסת את הקבוצה. +קבוצה שאינה מלכדת מסומנת על ידי התו `?` ואחריו `:` בתוך הסוגריים הרגילים. `(...)`. +לדוגמא, בביטוי הרגולרי `(?:c|g|p)ar` שדומה ל-`(c|g|p)ar` +בכך שהוא תואם לאותם תווים אך לא ייצר קבוצת לכידה. + +
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/Rm7Me8/1) + +קבוצות שאינן מלכדות יכולות להיות שימושיות כאשר יש צורך בפונקציונליות של חיפוש והחלפה +או כאשר מעורבת גם קבוצת לכידה בכדי לשמור על הסקירה כאשר מפיקים כל סוג אחר של פלט. +ניתן לראות גם ב [4. Lookaround](#4-lookaround). + +## 2.6 חלופה + +בביטוי רגולרי, הקו ניצב `|` משמש בכדי להגדיר חלופה. חלופה היא כמו הצהרת OR (או) +בין ביטויים שונים. כעט את.ה עלול לחשוב שמערכות התווים והתו המשמש להגדרת חלופה יעבדו באותה הדרך. +אך ההבדל העיקרי בין מערכת תווים לבין חלופה הוא שמערכת תווים פועלת ברמת התו והחלופה +עובדת ברמת הביטוי. לדוגמא, הביטוי הרגולרי `(T|t)he|car` פירושו: או (אות גדולה `T` או אות קטנה +`t`, שלאחריהן אות קטנה `h`, שאחריה אות קטנה `e`) או (אות קטנה `c`, שאחריה תופיע האות `a`, +ולאחריה תופיע האות `r`). יש לשים לב שהכללתי את הסוגריים לשם ההבהרה, +בכדי להראות שאפשר להתמודד עם כל ביטוי בסוגריים והוא יתאים. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/fBXyX0/1) + +## 2.7 התעלמות מתווים מיוחדים + +לוכסן שמאלי `\` משמש בביטוי רגולרי בכדי להתעלם מהתו הבא. זה מאפשר לנו לכלול תוים שמורים כמו +`{ } [ ] / \ + * . $ ^ | ?` כתוים להתאמות. הכדי להשתמש בתוים המיוחדים הללו התו התאמה, +יש להוסיף אותו מראש עם `\` לפניו. לדוגמא, הביטוי הרגולרי `.` משמש בכדי להתאים כל תו חוץ משורה חדשה. +כעט בכדי לבצע התאמה עם הסימן `.` במחרוזת קלט, יהיה צורך בהוספת הלוכסן השמאלי. למשל בביטוי הרגולרי +`(f|c|m)at\.?` פירושו: אות קטנה `f`, `c` או `m`, שאחריהן תופיע האות הקטנה +`a`, ואחריה תופיע האות הקטנה `t`, ולבסוף יופיע באופן אופציונלי התו - `.`. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/DOc5Nu/1) + +## 2.8 עוגנים + +בביטויים רגולרים, אנחנו משתמשים בעוגנים בכדי לבדוק אם סימן ההתאמה הוא סימן התחלה או +סימן סיום של מחרוזת הקלט. ישנם שני סוגי עוגנים: +הסוג הראשון הוא ה"קרט"(גג) `^` שבודק אם תו תואם הוא התו הראשון של הקלט והסוג השני הוא סימן הדולר +`$` אשר בודק אם תו תואם הוא התו האחרון שבקלט + +### 2.8.1 ה-"קרט" + +הסימן "קרט" `^` משמש לבדיקה אם תו תואם הוא התו הראשון של מחרוזת הקלט. +אם ניישם את הביטור הרגולרי הבא `^a` (כלומר 'a' חייב להיות התו ההתחלתי) +המחרוזת `abc`, תתאים לדרישות `a`. +אך אם ניישם את הביטוי הרגולרי `^b` על במחרוזת למעלה, היא לא תמצא אף התאמה. +בגלל שבמחרוזת `abc`, ה-"b" אינו תו התחלתי. בואו נסתכל על ביטוי רגולרי אחר +`^(T|t)he` שפירושו: אות גדולה `T` או אות קטנה `t` חייבת להיות התו הראשון של המחרוזת, +ואחריה האות הקטנה `h`, ולאחריה האות הקטנה `e`. + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/jXrKne/1) + +### 2.8.2 סימן הדולר + +סימן הדולר `$` משמש בכדי לבדוק אם התו התואם הוא התו האחרון במחרוזת. לדוגמא, +הביטוי הרגולרי `(at\.)$` פירושו: האות הקטנה `a`, שאחריה תיהיה האות הקטנה `t`, ואחריה התו נקודה `.` +וכל ההתאמה חייבת לביות בסופה של המחרוזת. + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](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. הסתכלויות + +מבט לאחור ומבט לפנים (נקראים גם הסתכלויות) אלו הם סוגים ספציפים של קבוצות שאינן לוכדות. +(משמשות בכדי להתאים תבנית אך ללא הכנסתה לרשימת ההתאמות). +הסתכלויות משמשות כאשר יש להקדים תבנית בכך שזו תלויה בתבנית אחרת בכדי שהראשונה תתאים. +לדוגמא, תדמיין.י שאנחנו רוצים לקבל את כל המספרים שלפניהם יש את התו `$` מהמחרוזת +`$4.44 and $10.88`. אנחנו נשתמש בביטוי הרגולרי הבא: +`(?<=\$)[0-9\.]*` שפירושו: התאם את כל הספרות או התו `.` שלפני ההתאמה +קיים התו `$`. בטבלה מטה מוצגים סוגי המבטים המשמשים ביטויים רגולרים: + +|סימן|תיאור| +|:----:|----| +|?=|מבט קדימה חיובי| +|?!|מבט קדימה שלילי| +|?<=|מבט אחורה חיובי| +|?|מבט אחורה שלילי| + +### 4.1 מבט קדימה חיובי + +מבט קדימה חיובי דורש שבחלקו הראשון של ביטוי חייב להתקיים הביטוי מבט קדימה חיובי. +ההתאמה המוחזרת מכילה רק את הטקסט המתאים לחלק הראשון של הביטוי לפני המבט קדימה. +בכדי להגדיר מבט קדימה חיובי, משתמשים בסוגריים. בתוך הסוגריים, משתמשים בסימן שאלה +ואחריו סימן השוואה כך: `(?=...)`. ביטויי המבט קדימה נכתבים אחרי סימני סוג +המבט בתוך הסוגריים. לדוגמא, הביטוי הרגולרי `(T|t)he(?=\sfat)` פירושו: +התאם או את האות הקטנה `t` או את האות הגדולה `T`, שאחריה תיהיה האות `h`, ואחריה האות `e`. +בסוגריים אנחנו מגדירים מבט קדימה חיובי שאומר למנוע של הביטוי הרגולרי להתאים `The` או `the` +רק אם אחרי ההתאמה מופיעה המחרוזתS ` fat`. + +
+"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/IDDARt/1) + +### 4.2 מבט קדימה שלילי + +משתמשים במבט קדימה שלילי כשאנחנו צריכים לקבל את כל ההתאמות ממחרוזת קלט שלאחריהן אין תבנית מסויימת. +מבט קדימה שלילי יכתב באותה הדרך כמו שנכתב המבט קדימה החיובי. ההבדל היחיד הוא שמבקום +סימן השווה `=`, עלינו להשתמש בסימן קריאה `!` בכדי לציין את השלילה כלומר: `(?!...)`. +בואו נסתכל על הביטוי הרגולרי הבא `(T|t)he(?!\sfat)` שפירושו: התאם את כל המילים `The` או `the` +ממחרוזת קלט שאחריהן אין את התו רווח ולאחר מכן את המילה `fat`. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/V32Npg/1) + +### 4.3 מבט אחורה חיובי + +משתמשים במבט אחורה חיובי בכדי לקבל את כל ההתאמות שלפניהן יש תבנית ספציפית מסויימת. +מבטים אחורה חיוביים נכתבים כך: `(?<=...)`. לדוגמא, +הביטוי הרגולרי `(?<=(T|t)he\s)(fat|mat)` פירושו: התאם +את כל המילים `fat` או `mat` ממחרוזת קלט שנמצאות לפני המילים `The` או `the` ויש רווח +שמפריד בינהן. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/avH165/1) + +### 4.4 מבט אחורה שלילי + +משתמשים במבט אחורה שלילי בכדי לקבל את כל ההתאמות שלפניהן אין תבנית ספציפית מסויימת. +מבטים אחורה שליליים יכתבו כך: `(?. לדוגמא, הביטוי הרגולרי +`(? פירושו: התאם את כל המילים `cat` +ממחרוזת קלט שלא נמצאות אחרי המילים `The` or `the` כאשר רווח מפריד בינהן. + +
+"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/8Efx5G/1) + +## 5. דגלים + +דגלים נקראים גם משנים בגלל שהם משנים את הפלט של הביטוי הרגולרי. +ניתן להשתמש בדגלים הללו בכל סדר או שילוב והם חלק בלתי נפרד +מהביטוי הרולרי (RegExp). + +|דגל|תיאור| +|:----:|----| +|i|חוסר רגישות לאותיות: ההתאמה לא תהיה רגישה לאותיות קטנות או גדולות.| +|g|חיפוש גלובלי: התאם את כל ההאמות שהופיעו, לא רק את הראשונה.| +|m|רב-שורות: תווי-המטא העוגנים (`$` או `^`) עובדים על כל שורה.| + +### 5.1 חוסר רגישות לאותיות + +המשנה `i` משמש בכדי לבצע התאמות חסרות רגישות לאותיות קטנות או גדולות. +לדוגמא, בביטוי הרגולרי `/The/gi` פירושו: אות גדולה `T`, ואחריה אות קטנה +`h`, ואחריה אות קטנה `e`. ובסוף הביטוי הרגולרי יש את הדגל `i` שאומר למנוע הביטוי הרגולרי +להתעלם מהבדלי אותיות גדולות או קטנות. וכפי שאת.ה יכול לראות, +סיפקנו גם דגל `g` בגדלל שאנחנו רוצים לחפש את התבנית בכל מחרוזת הקלט. + +
+"The" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/ahfiuh/1) + +### 5.2 חיפוש גלובלי + +המשנה `g` משמש בכדי לבצע התאמות גלובליות (מוצא את כל ההתאמות במקום לעצור בהתאמה הראשונה). +לדוגמא, בביטוי הרגולרי `/.(at)/g` פירושו: כל תו חות משורה חדשה, שאחריו תיהיה האות הקטנה `a`, +ואחריה תיהיה האות הקטנה `t`. בגלל שסיפקנו את הדגל `g` בסופו של הביטוי הרגולרי, +הוא עכשיו ימצא את כל ההתאמות במחרוזת הקלט, לא רק את ההתאמה הראשונה (שזו התנהגות ברירת המחדל). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/dO1nef/1) + +### 5.3 רב-שורות + +המשנה `m` משמש בכדי לבצע התאמות במספר רב של שורות. כפי שדנו על כך קודם לכן, +העוגנים `(^, $)` משמשים לבדיקה אם תבנית היא בהתחלה או בסופו של קלט. +אבל אם אנחנו רוצים שהעוגנים הללו יעבדו על כל שורה, אנחנו נשתמש בדגל `m`. לדוגמא, +בביטוי הרגולרי `/at(.)?$/gm` פירושו: אות קטנה +`a`, שלאחריה האות הקטנה `t` וכאופציה, כל תו שאינו שורה חדשה. ובגלל הדגל `m`, +המנוע של הביטוי הרגולרי יתאים את התבנית בכל סוף שורה במחרוזת. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/E88WE2/1) + +## 6. התאמה חמדנית מול עצלה + +כברירת מחדל, ביטוי רגולרי יבצע התאמה חמדנית, זאת אומרת שביצוע ההתאמה תיהיה ארוכה ככל הניתן. +אנחנו יכולים להשתמש ב-`?` בכדי לבצע התאמה בצורה עצלה, פירוש הדבר שההתאמה תיהיה קצרה ככל שניתן. + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[בדוק.י את הביטוי הרגולרי](https://regex101.com/r/AyAdgJ/2) + + +## תרומה + +* Open a pull request with improvements +* Discuss ideas in issues +* Spread the word +* Reach out with any feedback +* [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## רישיון + +MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) +
\ No newline at end of file From 3eed853d45a2671717db853c113192f41c0ea86d Mon Sep 17 00:00:00 2001 From: Recurduck Greco Date: Sat, 16 Oct 2021 03:01:36 +0300 Subject: [PATCH 134/156] Add hebrew translation link to all README files --- translations/README-cn.md | 1 + translations/README-de.md | 1 + translations/README-es.md | 1 + translations/README-fa.md | 1 + translations/README-fr.md | 1 + translations/README-gr.md | 1 + translations/README-hu.md | 1 + translations/README-ja.md | 1 + translations/README-ko.md | 1 + translations/README-pl.md | 1 + translations/README-pt_BR.md | 1 + translations/README-ru.md | 1 + translations/README-tr.md | 1 + translations/README-vn.md | 1 + translations/README-zh-simple.md | 1 + 15 files changed, 15 insertions(+) diff --git a/translations/README-cn.md b/translations/README-cn.md index c29158a7..c0756803 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## 什么是正则表达式? diff --git a/translations/README-de.md b/translations/README-de.md index c2c179fc..92ac194d 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -21,6 +21,7 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) +* [עברית](translations/README-he.md) ## Was sind Reguläre Ausdrücke? diff --git a/translations/README-es.md b/translations/README-es.md index 907f9a1a..065edeb3 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## Qué es una expresión regular? diff --git a/translations/README-fa.md b/translations/README-fa.md index 5595d455..74e35deb 100644 --- a/translations/README-fa.md +++ b/translations/README-fa.md @@ -30,6 +30,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md)
diff --git a/translations/README-fr.md b/translations/README-fr.md index 46016160..face914f 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## Qu'est-ce qu'une expression régulière? diff --git a/translations/README-gr.md b/translations/README-gr.md index 763bd8f9..2da80b53 100644 --- a/translations/README-gr.md +++ b/translations/README-gr.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## Τι είναι μια Κανονική Έκφραση (Regular Expression); diff --git a/translations/README-hu.md b/translations/README-hu.md index 16a6804e..726abf2d 100644 --- a/translations/README-hu.md +++ b/translations/README-hu.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## Mi az a reguláris kifejezés? diff --git a/translations/README-ja.md b/translations/README-ja.md index 308b6391..ef9a2894 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## 正規表現とは diff --git a/translations/README-ko.md b/translations/README-ko.md index e210de48..c41feb6a 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## 정규표현식이란 무엇인가? diff --git a/translations/README-pl.md b/translations/README-pl.md index 13f1e9a0..1569b31a 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## Co to jest wyrażenie regularne? diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md index 68db0e19..3bcde4fd 100644 --- a/translations/README-pt_BR.md +++ b/translations/README-pt_BR.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## O que é uma Expressão Regular? diff --git a/translations/README-ru.md b/translations/README-ru.md index d76116c5..8cfe2c3e 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -30,6 +30,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## Что такое Регулярное выражение? diff --git a/translations/README-tr.md b/translations/README-tr.md index f3a3967e..d891a641 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -31,6 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## Düzenli İfade Nedir? diff --git a/translations/README-vn.md b/translations/README-vn.md index c6d15f87..f975cd7a 100644 --- a/translations/README-vn.md +++ b/translations/README-vn.md @@ -32,6 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## Biểu thức chính quy là gì? diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md index f591052a..d79767cb 100644 --- a/translations/README-zh-simple.md +++ b/translations/README-zh-simple.md @@ -30,6 +30,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) +* [עברית](translations/README-he.md) ## 什么是正则表达式? From 8608347dea36b4fc658742f5860b84742fa80289 Mon Sep 17 00:00:00 2001 From: Recurduck Greco Date: Sat, 16 Oct 2021 17:06:09 +0300 Subject: [PATCH 135/156] fix typo hebrew --- README.md | 2 ++ translations/README-he.md | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 34ef8d6b..54c46380 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,8 @@ * [Русский](translations/README-ru.md) * [Tiếng Việt](translations/README-vn.md) * [فارسی](translations/README-fa.md) +* [עברית](translations/README-he.md) + ## What is Regular Expression? diff --git a/translations/README-he.md b/translations/README-he.md index f8ec8537..a66099f7 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -120,10 +120,10 @@ |.|נקודה תואמת כל תו בודד למעט שבירת שורות.| |[ ]|מחלקת תווים. תואם כל תו הכלול בין הסוגריים המרובעים.| |[^ ]|מחלקת תווים שלילית. תואם כל תו שאינו כלול בין הסוגריים המרובעים| -|*|תואם 0 או יותר חזרות של הסמל הקודם.| -|+|תואם חזרה אחת או יותר של הסמל הקודם.| -|?|הופך את הסמל הקודם לאופציונלי.| -|{n,m}|סוגריים מסולסלים. תואם לפחות חזרות "n" אך לא יותר מ- "m" של הסמל הקודם.| +|*|תואם 0 או יותר חזרות של התו הקודם.| +|+|תואם חזרה אחת או יותר של התו הקודם.| +|?|הופך את התו הקודם לאופציונלי.| +|{n,m}|סוגריים מסולסלים. תואם לפחות חזרות "n" אך לא יותר מ- "m" של התו הקודם.| |(xyz)|קבוצת תווים. תואם את התווים xyz בסדר המדויק הזה.| |||חלופה (או). התאמה בין התווים שלפני או לתווים שאחרי הסמל.| |\|מתעלם מהתו הבא. זה מאפשר לך להתאים תווים שמורים [ ] ( ) { } . * + ? ^ $ \ || From 554f46d6da0ef2ba3c3b05fac3e14416c06da186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sun, 17 Oct 2021 13:43:51 +0300 Subject: [PATCH 136/156] Fix some thread title on Turkish --- translations/README-tr.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/translations/README-tr.md b/translations/README-tr.md index 939120da..483a7fae 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -66,8 +66,8 @@ Yukardaki düzenli ifade `john_doe`, `jo-hn_doe` ve `john12_as` gibi girişleri - [Temel Eşleştiriciler](#1-temel-eşleştiriciler) - [Meta Karakterler](#2-meta-karakterler) - [Nokta](#21-nokta) - - [Karakter takımı](#22-karakter-takımı) - - [Negatiflenmiş karakter seti](#221-negatiflenmiş-karakter-seti) + - [Karakter Takımı](#22-karakter-takımı) + - [Negatiflenmiş Karakter Seti](#221-negatiflenmiş-karakter-seti) - [Tekrarlar](#23-tekrarlar) - [Yıldız İşareti](#231-yıldız-İşareti) - [Artı İşareti](#232-artı-İşareti) @@ -78,8 +78,8 @@ Yukardaki düzenli ifade `john_doe`, `jo-hn_doe` ve `john12_as` gibi girişleri - [Değişim](#26-değişim) - [Özel Karakter Hariç Tutma](#27-Özel-karakter-hariç-tutma) - [Sabitleyiciler](#28-sabitleyiciler) - - [Ters v işareti](#281-Şapka-İşareti) - - [Dolar işareti](#282-dolar-İşareti) + - [Şapka İşareti](#281-Şapka-İşareti) + - [Dolar İşareti](#282-dolar-İşareti) - [Kısaltma Karakter Takımları](#3-kısaltma-karakter-takımları) - [Bakınmak](#4-bakınmak) - [Olumlu Bakınma](#41-positive-lookahead) @@ -87,10 +87,11 @@ Yukardaki düzenli ifade `john_doe`, `jo-hn_doe` ve `john12_as` gibi girişleri - [Positive Lookbehind](#43-positive-lookbehind) - [Negative Lookbehind](#44-negative-lookbehind) - [İşaretler](#5-İşaretler) - - [Büyük/Küçük harf duyarlılığı](#51-büyükküçük-harf-duyarlılığı) + - [Büyük/Küçük Harf Duyarlılığı](#51-büyükküçük-harf-duyarlılığı) - [Bütünsel Arama](#52-genel-arama) - - [Çok satırlı](#53-Çok-satırlı) + - [Çok Satırlı](#53-Çok-satırlı) - [Açgözlü vs Tembel Eşleştirme](#6-açgözlü-vs-tembel-eşleştirme) + ## 1. Temel Eşleştiriciler Bir düzenli ifade bir metin içinde arama yapabilmek için kullandığımız bir karakter desenidir. From 04936755d234709b074f9da43f7ef26687269c87 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Tue, 19 Oct 2021 14:32:57 +0400 Subject: [PATCH 137/156] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 6dc3094b..9651e152 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -Buy Me A Coffee -


From aed29db0d25ffa1a18dc0f629217b951bad76a2f Mon Sep 17 00:00:00 2001 From: Claudio Marconato Date: Sat, 11 Dec 2021 09:16:33 +0100 Subject: [PATCH 138/156] Create README-it.md --- translations/README-it.md | 477 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 477 insertions(+) create mode 100644 translations/README-it.md diff --git a/translations/README-it.md b/translations/README-it.md new file mode 100644 index 00000000..1d4a3021 --- /dev/null +++ b/translations/README-it.md @@ -0,0 +1,477 @@ +

+
+
+ Learn Regex + +

+ + +## Translations: + +* [English](README.md) +* [German](translations/README-de.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) +* [Русский](translations/README-ru.md) +* [Tiếng Việt](translations/README-vn.md) +* [فارسی](translations/README-fa.md) +* [עברית](translations/README-he.md) + + +## Cosa sono le Espressioni Regolari? + +

+ + Download PDF + +

+ +> Un'espressione regolare è un insieme di caratteri e simboli utilizzati per trovare una specifica sequenza (pattern) di testo. + + +Un'espressione regolare è una sequenza che corrisponde a una stringa di testo letta da sinistra a destra. Le espressioni regolari sono utilizzate per sostituire parti di testo in una stringa, validare moduli, estrarre parti di stringhe basate sulla corrispondenza di uno schema e molto altro. Il termine "Espressione regolare" è molto lungo quindi è normalmente abbreviato con "regex" o "regexp". + +Immagina che stai scrivendo un applicazione e hai bisogno di impostare una regola per quando un utente sceglie il suo nome utente. Vogliamo consentire che il nome utente contenga lettere, numeri, carattere di sottolineo e il trattino, vogliamo inoltre limitare il numero di caratteri del nome utente. Possiamo utilizzare la seguente espressione regolare per validare il nome utente: +

+

+ Regular expression +

+ +L'espressione regolare riportata sopra può accettare le stringhe `john_doe`, `jo-hn_doe` e `john12_as`. Non c'è corrispondenza con `Jo` perché contiene una lettera maiuscola ed inoltre è troppo breve. + +## Sommario + +- [Corrispondenze di base](#1-basic-matchers) +- [Caratteri jolly](#2-meta-characters) + - [Il punto](#21-the-full-stop) + - [Classe di caratteri](#22-character-sets) + - [Negazione di classe di carattere](#221-negated-character-sets) + - [Ripetizioni](#23-repetitions) + - [Simbolo Asterisco](#231-the-star) + - [Simbolo Più](#232-the-plus) + - [Carattere Punto di Domanda](#233-the-question-mark) + - [Parentesi](#24-braces) + - [Raggruppamento e cattura di caratteri](#25-capturing-groups) + - [Raggruppamento di caratteri senza cattura](#251-non-capturing-groups) + - [Alternativa](#26-alternation) + - [Carattere speciale Escape](#27-escaping-special-characters) + - [Ancore](#28-anchors) + - [Segno di omissione ^](#281-the-caret) + - [Il simbolo del dollaro](#282-the-dollar-sign) +- [Classe di caratteri rapide](#3-shorthand-character-sets) +- [Guardarsi intorno](#4-lookarounds) + - [Lookahead positivo](#41-positive-lookahead) + - [Lookahead negativo](#42-negative-lookahead) + - [Lookbehind positivo](#43-positive-lookbehind) + - [Lookbehind negativo](#44-negative-lookbehind) +- [Opzioni](#5-flags) + - [Sensibilità ai caratteri maiuscoli e minuscoli](#51-case-insensitive) + - [Ricerca globale](#52-global-search) + - [Riga multipla](#53-multiline) +- [Corrispondenza vorace vs pigra](#6-greedy-vs-lazy-matching) + +## 1. Corrispondenze di base + +Un'espressione regolare non è altro che una sequenza di caratteri usati per eseguire ricerche in un testo. Ad esempio, l'espressione regolare `the` corrisponde a: la lettera `t`, seguita dalla lettera `h`, seguita dalla lettera `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/dmRygT/1) + +L'espressione regolare `123` corrisponde alla stringa `123`. L'espressione regolare viene confrontata con il testo da ricercare carattere per carattere, al fine di trovare la corrispondenza completa. +Le espressioni regolari sono normalmente sensibili a caratteri maiuscoli e minuscoli, perciò l'espressione regolare `The` non troverà corrispondenza con il testo `the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/1paXsy/1) + +## 2. Caratteri jolly + +I caratteri jolly sono i mattoncini per la costruzione di espressioni regolari. I caratteri jolly non vengono usati letteralmente, vengono invece interpretati come caratteri speciali. Alcuni caratteri jolly hanno un significato speciale se inseriti all'interno di parentesi quadre. I caratteri jolly sono i seguenti: + +|Carattere jolly|Descrizione| +|:----:|----| +|.|Il punto corrisponde ad ogni carattere eccetto l'invio e l'interruzione di riga.| +|[ ]|Classe di caratteri. Corrispondenza con ciascun carattere contenuto tra le parentesi.| +|[^ ]|Negazione di classe di caratteri. Corrispondenza con ciascun carattere non contenuto all'interno delle parentesi| +|*|Corrispondenza con zero o più ripetizioni del carattere che lo precede.| +|+|Corrispondenza con una o più ripetizioni del carattere che lo precede| +|?|Rende opzionale il carattere che lo precede.| +|{n,m}|Parentesi graffe. Corrisponde con le ripetizione minima di "n" ma non più di "m", del carattere che le precede.| +|(xyz)|Gruppo di caratteri. Corrispondenza con i caratteri tra parentesi xyz solo nell'ordine esatto.| +|||Alternativa. Corrispondenza con il carattere che precede o con quello che segue.| +|\|Escape sul carattere successivo. Consente la corrispondenza con i caratteri riservati [ ] ( ) { } . * + ? ^ $ \ || +|^|Corrispondenza con l'inizio del testo.| +|$|Corrispondenza con la fine del testo.| + +## 2.1 Il punto + +Il punto `.` è il più semplice esempio di carattere jolly. Il carattere jolly `.` ha corrispondenza con ogni singolo carattere nel testo da cercare. Non ha corrispondenza con i caratteri di invio e fine riga. +Ad esempio, l'espressione regolare `.ar` significa: ciascun carattere, seguito dalla lettera `a`, seguita dalla lettera `r`. + +
+".ar" => The car parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/xc9GkU/1) + +## 2.2 Classi di carattere + +Le parentesi quadre sono utilizzate per definire una classe di caratteri. Si può utilizzare il trattino per definire degli intervalli all'interno della classe. L'ordine dei caratteri utilizzati nella classe non ha influenza sul risultato. Ad esempio, l'espressione regolare `[Tt]he` significa: una lettera maiuscola `T` o una lettera minuscola `t`, seguita dalla lettera `h`, seguita dalla lettera `e`. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/2ITLQ4/1) + +Un punto all'interno di una classe di caratteri, in ogni caso, corrisponde al punto letterale. L'espressione regolare `ar[.]` corrisponde a: una lettera minuscola `a`, seguita dalla lettera `r`, seguita dal carattere `.`. + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Negazione di classe di carattere + +In generale, il carattere di omissione ^ rappresenta l'inizio di un testo, ma se inserito come primo carattere all'interno di parentesi quadre, funziona come negazione della classe di caratteri. Ad esempio, l'espressione regolare `[^c]ar` corrisponde a: qualsiasi carattere tranne la lettera `c`, seguito dalla lettera `a`, seguita dalla lettera `r`. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/nNNlq3/1) + +## 2.3 Ripetizioni + +I caratteri jolly `+`, `*` o `?` sono utilizzati per specificare quante volte uno schema si può ripetere. Questi caratteri jolly agiscono in modo differente per differenti situazioni. + +### 2.3.1 Simbolo Asterisco + +Il simbolo `*` corrisponde a zero o più ripetizioni della sequenza precedente. L'espressione regolare `a*` corrisponde a: zero o più ripetizioni della precedente lettera minuscola `a`. +Se il simbolo viene utilizzato a seguito di una classe di caratteri allora verranno applicate le ripetizioni all'intera classe. Ad esempio, l'espressione regolare `[a-z]*` corrisponde a: qualsiasi ripetizione di ciascuna lettera minuscola in un testo. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/7m8me5/1) + +Il simbolo `*` più essere applicato al carattere jolly `.` per la corrispondenza con qualsiasi numero di caratteri `.*`. Il simbolo `*` può essere usato con lo spazio vuoto `\s` per la corrispondenza con una stringa di spazi vuoti. Ad esempio l'espressione regolare `\s*cat\s*` corrisponde a: nessuno o più spazi, seguiti dalla lettera minuscola `c`, seguita dalla lettera minuscola `a`, seguita dalla lettera minuscola `t`, seguite da nessuno o più spazi vuoti. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 Simbolo Più + +Il simbolo `+` corrisponde a una o più ripetizioni della sequenza precedente. Ad esempio, l'espressione regolare `c.+t` corrisponde a: una lettera minuscola `c`, seguita da almeno un carattere, seguito dalla lettera minuscola `t`. +È importante chiarire che `t` corrisponde all'ultima lettera `t` nella stringa. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 Carattere Punto di Domanda + +Nelle espressioni regolari, il carattere jolly `?` rende opzionale il carattere che lo precede. Questo simbolo corrisponde alla ripetizione zero o una volta della sequenza che lo precede. +Ad esempio, l'espressione regolare `[T]?he` corrisponde a: Lettera maiuscola opzionale `T`, seguita, se presente, dalla lettera maiuscola `h`, seguita dalla lettera minuscola `e`. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/kPpO2x/1) + +## 2.4 Parentesi graffe + +Nelle espressioni regolari, le parentesi graffe (chiamate anche quantificatori) sono utilizzate per specificare il numero di volte che un carattere o una classe di caratteri possono essere ripetute per mantenere la corrispondenza. Ad esempio, l'espressione regolare `[0-9]{2,3}` corrisponde a: Almeno 2 cifre, ma non più di 3, nell'intervallo da 0 a 9. + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/juM86s/1) + +Si può omettere il secondo numero. Ad esempio, l'espressione regolare `[0-9]{2,}` corrisponde a: 2 o più cifre. Inoltre possiamo rimuove la virgola di separazione, l'espressione regolare `[0-9]{3}` corrisponde a: esattamente 3 cifre. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/Sivu30/1) + +## 2.5 Raggruppamento e cattura di caratteri + +Un gruppo di caratteri è un sottoschema scritto all'interno di parentesi `(...)`. Come esposto in precedenza, se inseriamo un quantificatore a seguito di un carattere, viene definita la ripetizione del carattere stesso; allo stesso modo, se inseriamo un quantificatore a seguito di un gruppo di caratteri, definiamo la ripetizione dell'intero gruppo. Ad esempio, l'espressione regolare `(ab)*` corrisponde a zero o più ripetizioni della sequenza esatta di lettere minuscole "ab". +Si può inoltre utilizzare il carattere di alternativa `|` all'interno di un gruppo di caratteri. +Ad esempio, l'espressione regolare `(c|g|p)ar` corrisponde a: una lettera minuscola a scelta tra `c`, `g` o `p`, seguita dalla lettera minuscola `a`, seguite dalla lettera minuscola `r`. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/tUxrBG/1) + +Nota che il gruppo di carattere non trova solo corrispondenza, ma cattura il contenuto del gruppo, per utilizzarlo in un linguaggio di programmazione. Il linguaggio può essere Python, Javascript o qualsiasi linguaggio che implementi funzioni per l'utilizzo di espressioni regolari. + +### 2.5.1 Raggruppamento di caratteri senza cattura + +Un gruppo di caratteri senza cattura è un gruppo utilizzato per la corrispondenza ma non per la cattura. È definito dal carattere `?` seguito da `:` all'interno delle parentesi `(...)`. Ad esempio, l'espressione regolare `(?:c|g|p)ar` è simile a `(c|g|p)ar`, corrisponde alla stessa stringa ma non cattura il gruppo. + +
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/Rm7Me8/1) + +I gruppi senza cattura sono utili per funzioni di ricerca e sostituzione o quando utilizzati in abbinata con gruppi di cattura per produrre diversi tipi di output. +Vedere anche [4. Guardarsi intorno](#4-lookaround). + +## 2.6 Alternativa + +In un'espressione regolare, la barra verticale `|` è utilizzata per definire alternative. +L'alternativa corrisponde alla dichiarazione OR tra espressioni multiple. Sagrai pensando che gli insiemi di caratteri e le alternative funzionino allo stesso modo, ma la grande differenza è che l'alternativa funziona a livello di espressione. Ad esempio, l'espressione regolare `(T|t)he|car` corrisponde a: sia (una lettera maiuscola `T` o una lettera minuscola `t`, seguita dalla lettera minuscola `h`, seguita da una lettera minuscola `e`), sia +(Una lettera minuscola `c`, seguita da una lettera minuscola `a`, seguita dalla lettera minuscola `r`). +Nota che sono state incluse le parentesi per chiarezza, per dimostrare come le espressioni possono funzionare anche all'interno delle parentesi stesse. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/fBXyX0/1) + +## 2.7 Carattere speciale Escape + +Il carattere di escape `\` è utilizzato nelle espressioni regolari per annullare la funzione del carattere jolly seguente. Questo consente di includere caratteri riservati, come `{ } [ ] / \ + * . $ ^ | ?` all'interno di un'espressione regolare per la corrispondenza letterale. + +Ad esempio, l'espressione regolare `.` è utilizzata per la corrispondenza con qualsiasi carattere eccetto il carattere di invio e di fine riga. Quindi, per la corrispondenza del carattere `.`, l'espressione regolare `(f|c|m)at\.?` corrisponde a: una lettera minuscola `f`, `c` o `m`, seguita dalla lettera minuscola `a`, seguita dalla lettera minuscola `t`, seguita dal carattere `.` opzionale. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/DOc5Nu/1) + +## 2.8 Ancore + +Nelle espressioni regolari, si usano le ancore per la corrispondenza dell'espressione stessa, all'inizio o al termine di un testo. +Le ancora sono di due tipi: +Il primo tipo è il carattere di negazione `^` che verifica la corrispondenza all'inizio del testo, il secondo tipo è il carattere `$` che verifica la corrispondenza al termine del testo. + +### 2.8.1 Il carattere di negazione ^ + +Il simbolo di negazione `^` è usato per verificare la corrispondenza al primo carattere del testo. Utilizzando l'espressione regolare `^a` (significa che 'a' deve essere il primo carattere) con il testo `abc`, ci sarà corrispondenza con `a`. Applicando l'espressione regolare `^b` al testo precedente, non ci sarà alcuna corrispondenza. +Questo perché nel testo `abc`, la lettera "b" non è il carattere iniziale. Vediamo un'altra espressione regolare, `^(T|t)he` che corrisponde a: una lettera maiuscola `T` o una lettera minuscola `t` deve essere la prima lettera del testo, seguita dalla lettera minuscola `h`, seguita dalla lettera minuscola `e`. + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Il simbolo del Dollaro + +Il simbolo del collario `$` è utilizzato per verificare la corrispondenza con la parte finale del testo. Ad esempio, l'espressione regolare `(at\.)$` corrisponde a: una lettera minuscola `a`, seguita da una lettera minuscola `t`, seguita dal carattere punto `.`, il tutto deve trovarsi al termine del testo. + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/t0AkOd/1) + +## 3. Classe di caratteri rapide + +Ci sono alcune classe di caratteri rapide per l'utilizzo nelle espressioni regolari: + +|Classe di caratteri rapide|Descrizione| +|:----:|----| +|.|Qualsiasi carattere tranne invio e fine riga| +|\w|Corrispondenza con caratteri alfanumerici: `[a-zA-Z0-9_]`| +|\W|Corrispondenza con caratteri non alfanumerici: `[^\w]`| +|\d|Corrispondenza con numeri: `[0-9]`| +|\D|Corrispondenza con caratteri che non siano numeri: `[^\d]`| +|\s|Corrispondenza con spazi vuoti: `[\t\n\f\r\p{Z}]`| +|\S|Corrispondenza con caratteri che non siano spazi vuoti: `[^\s]`| + +## 4. Guardarsi intorno + +Lookbehinds e lookaheads sono speciali tipi di ***gruppi di caratteri senza cattura***. Guardarsi intorno sono utilizzati quando uno schema deve essere preceduto o seguito da un altro schema. Ad esempio, pensiamo di dover selezionare i numeri preceduti dal carattere `$` nel testo `$4.44 and $10.88`. Useremo l'espressione regolare `(?<=\$)[0-9\.]*` che corrisponde a: selezionare tutti i numeri che contengono il carattere `.` e sono preceduti dal carattere `$`. Queste sono le espressioni di guardarsi intorno utilizzate: + +|Simbolo|Descrizione| +|:----:|----| +|?=|Lookahead positivo| +|?!|Lookahead negativo| +|?<=|Lookbehind positivo| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. +
+ +[Verifica l'espressione regolare](https://regex101.com/r/IDDARt/1) + +### 4.2 Lookahead negativo + +Lookahead negativo è utilizzato per ottenere corrispondenza con una stringa che non è seguita da un determinato schema. Il lookahead negativo è scritto nello stesso modo del lookahead positivo. L'unica differenza consiste nell'utilizzo del carattere di punto esclamativo `!`, al posto del segno uguale `=`, per indicare la negazione, ad esempio `(?!...)`. Vediamo la seguente espressioni regolare `(T|t)he(?!\sfat)` che trova corrispondenza con: tutte le parole `The` o `the` che non sono seguite da uno spazio dalla parola `fat`. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/V32Npg/1) + +### 4.3 Lookbehind positivo + +Lookbehind positivo è utilizzato per trovare il testo preceduto da uno specifico schema. Il lookbehind positivo è sxcritto come `(?<=...)`. Ad esempio, l'espressione regolare `(?<=(T|t)he\s)(fat|mat)` corrisponde a: tutte le parole `fat` o `mat` che seguono la parola `The` o `the`. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/avH165/1) + +### 4.4 Lookbehind negativo + +Lookbehind negativo è utilizzato per trovare il testo non preceduto da uno specifico schema. Il lookbehind negativo è sxcritto come `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. +
+ +[Verifica l'espressione regolare](https://regex101.com/r/8Efx5G/1) + +## 5. Opzioni + +Le opzioni (o modificatori) modificano il risultato delle espressioni regolari. Queste opzioni possono essere utilizzate in qualsiasi ordine o combinazione, sono parti integranti di RegExp. + +|Opzione|Descrizione| +|:----:|----| +|i|Non sensibilità maiuscolo / minuscolo| +|g|Ricerca globale: trova tutte le corrispondenze, non solo la prima.| +|m|Multi riga: estende il funzionamento delle ancore su ogni riga.| + +### 5.1 Non sensibilità maiuscolo / minuscolo + +L'opzione `i` è usato per rendere la corrispondenza non sensibile a maiuscolo / minuscolo. Ad esempio, l'espressione regolare `/The/gi` corrisponde a: una lettera maiuscola `T`, seguita da una lettera minuscola `h`, seguita da una lettera minuscola `e`. L'opzione `i` alla fine dell'espressione regolare indica di ignorare minuscole / maiuscole. Come si può notare, l'utilizzo dell'opzione `g` estende la ricerca all'intero testo. + +
+"The" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/ahfiuh/1) + +### 5.2 Ricerca globale + +L'opzione `g` è utilizzata per estendere la ricerca a corrispondenze multiple. Ad esempio, l'espressione regolare `/.(at)/g` corrisponde a: qualsiasi carattere eccetto invio e nuova riga, seguito dalla lettera minuscola `a`, seguita dalla lettera minuscola `t`. L'utilizzo dell'opzione `g` estende la ricerca all'intero testo. + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/dO1nef/1) + +### 5.3 Multi riga + +L'opzione `m` è utilizzata per estendere la corrispondenza in modalità multi riga. Come già esposto, le ancore `(^, $)` sono utilizzate per verificare se l'espressione si trova all'inizio o alla fine del testo. Volendo utilizzare le ancore su già righe di testo, si può attivare l'opzione `m`. Ad esempio, l'espressione regolare `/at(.)?$/gm` corrisponde a: una lettera minuscola `a`, seguita da una lettera minuscola `t` e, opzionalmente, qualsiasi carattere eccetto invio e nuova riga. Grazie all'opzione `m`, la corrispondenza viene estesa a ciascuna riga del testo. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Verifica l'espressione regolare](https://regex101.com/r/E88WE2/1) + +## 6. Corrispondenza vorace vs pigra +Regex ha un funzionamento predefinito vorace, ,significa che la corrispondenza è più estesa possibile. Si può utilizzare `?` per determinare una corrispondenza più pigra, così la corrispondenza è più breve possibile. + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Verifica l'espressione regolare](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[Verifica l'espressione regolare](https://regex101.com/r/AyAdgJ/2) + + +## Contribution + +* Open a pull request with improvements +* Discuss ideas in issues +* Spread the word +* Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) +* Traduzione italiana: Claudio Marconato (cmpro.it) + +## License + +MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) \ No newline at end of file From c81ccac43279301cf09da251c62922bfbd456542 Mon Sep 17 00:00:00 2001 From: Shaun Sandstrom <42827574+sandstroms@users.noreply.github.com> Date: Wed, 19 Jan 2022 14:45:38 -0700 Subject: [PATCH 139/156] Updated introduction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9651e152..3a038560 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ A regular expression is a pattern that is matched against a subject string from left to right. Regular expressions are used to replace text within a string, -validating forms, extracting a substring from a string based on a pattern match, +validate forms, extract a substring from a string based on a pattern match, and so much more. The term "regular expression" is a mouthful, so you will usually find the term abbreviated to "regex" or "regexp". From b347848518b0d217204fedfb377f9ef56412ce17 Mon Sep 17 00:00:00 2001 From: Volkan Sahin Date: Sun, 30 Jan 2022 14:45:29 +0300 Subject: [PATCH 140/156] Update README-tr.md Updates about typos, style, formatting, untranslated words --- translations/README-tr.md | 52 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/translations/README-tr.md b/translations/README-tr.md index 483a7fae..35f6824b 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -178,7 +178,7 @@ ardından bir `.` karakteri gelir. [Düzenli ifadeyi test edin](https://regex101.com/r/wL3xtE/1) -### 2.2.1 Negatiflenmiş karakter seti +### 2.2.1 Dışlanmış Karakter Seti Genellikle, şapka `^` sembolü harf öbeğinin başlangıcını temsil eder, ama köşeli parantez içinde kullanıldığında verilen karakter takımını hariç tutar. @@ -223,7 +223,7 @@ ardından küçük `c` karakteri gelir, ardından küçük `a` karakteri gelir, küçük `t` karakteri gelir, ardından sıfır veya daha fazla boşluk gelir.
-"\s*cat\s*" => The fat cat sat on the concatenation.
+"\s*cat\s*" => The fat cat sat on the concatenation.
 
[Düzenli ifadeyi test edin](https://regex101.com/r/gGrwuz/1) @@ -247,7 +247,7 @@ az bir karakter vardır. ### 2.3.3 Soru İşareti Düzenli ifadelerde `?` meta karakterinden önce girilen karakteri opsiyonel -olarak tanımlar. Bu sembol önce gelen karakterin sıfır veya bir örbeğiyle +olarak tanımlar. Bu sembol önce gelen karakterin sıfır veya bir örneğiyle eşleşir. Örneğin, `[T]?he` ifadesinin anlamı: opsiyonel büyük `T` harfi, ardından küçük @@ -318,7 +318,7 @@ karakteri, ardından `a` karakteri, ardından `r` karakteri gelir. [Düzenli ifadeyi test edin](https://regex101.com/r/tUxrBG/1) -Not olarak yakalanan gruplar yalnızca eşleşmez, ayrıca yakalanan karakterler ana dil içinde kullanılır.Bu ana dil Python,JavaScript ve neredeyse herhangi bir dilde düzenli ifadelerin fonksiyon tanımlamalarında olabilir. +Not olarak yakalanan gruplar yalnızca eşleşmez, ayrıca yakalanan karakterler ana dil içinde kullanılır.Bu ana dil Python, JavaScript ve neredeyse herhangi bir dilde düzenli ifadelerin fonksiyon tanımlamalarında olabilir. ### 2.5.1 Karakter Grubu Olmayanlar @@ -461,14 +461,14 @@ Düzenli ifadelerde kullanılan bakınma sembolleri aşadaki gibidir: |Sembol|Açıklama| |:----:|----| -|?=|Positive Lookahead (Verdiğimiz ifade sonrası arar ve `eşleşme varsa` sonuç döndürür.)| -|?!|Negative Lookahead (Verdiğimiz ifade sonrası arar ve `eşleşme yoksa` sonuç döndürür.)| -|?<=|Positive Lookbehind (Verdiğimiz ifade öncesini arar ve `eşleşme varsa` sonuç döndürür.)| -|?<-!-|Negative Lookbehind (Verdiğimiz ifade öncesini arar ve `eşleşme yoksa` sonuç döndürür.)| +|?=|Pozitif İleri Bakınma (Verdiğimiz ifade sonrası arar ve `eşleşme varsa` sonuç döndürür.)| +|?!|Negatif İleri Bakınma (Verdiğimiz ifade sonrası arar ve `eşleşme yoksa` sonuç döndürür.)| +|?<=|Pozitif Geri Bakınma (Verdiğimiz ifade öncesini arar ve `eşleşme varsa` sonuç döndürür.)| +|? Date: Mon, 31 Jan 2022 17:48:33 +0400 Subject: [PATCH 141/156] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3a038560..ed24f8c7 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@

+Donate using Liberapay ## Translations: From 40f1207d9a1329ee2a498bfd3c67f14acd103010 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Tue, 1 Feb 2022 12:10:49 +0400 Subject: [PATCH 142/156] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index ed24f8c7..9c1c4b2e 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,6 @@

-Donate using Liberapay - ## Translations: * [English](README.md) From b02f98adda116ef01e1fca91481ea72b344c02ca Mon Sep 17 00:00:00 2001 From: Cygra Date: Sun, 1 May 2022 22:22:25 +0800 Subject: [PATCH 143/156] Update README-cn.md --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 2a94abe2..44999549 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -31,7 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## 什么是正则表达式? From 3497a310c3e3f082f4d7eec6e77f98fec22f082c Mon Sep 17 00:00:00 2001 From: Cygra Date: Mon, 2 May 2022 12:32:42 +0800 Subject: [PATCH 144/156] Update README-cn.md --- translations/README-cn.md | 105 +++++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 41 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 44999549..d98f3c9b 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -18,6 +18,7 @@ ## 翻译: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -40,8 +41,8 @@ > 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。 一个正则表达式是一种从左到右匹配主体字符串的模式。 -“Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。 正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。 +“Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。 想象你正在写一个应用,然后你想设定一个用户命名的规则,让用户名包含字符、数字、下划线和连字符,以及限制字符的个数,好让名字看起来没那么丑。 我们使用以下正则表达式来验证一个用户名: @@ -91,7 +92,7 @@ ## 1. 基本匹配 正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成。 -例如:一个正则表达式 `the`,它表示一个规则:由字母`t`开始,接着是`h`,再接着是`e`。 +例如:一个正则表达式 `the`,它表示一个规则:由字母 `t` 开始,接着是 `h`,再接着是 `e`。
 "the" => The fat cat sat on the mat.
@@ -99,9 +100,9 @@
 
 [在线练习](https://regex101.com/r/dmRygT/1)
 
-正则表达式`123`匹配字符串`123`。它逐个字符的与输入的正则表达式做比较。
+正则表达式 `123` 匹配字符串 `123`。它逐个字符的与输入的正则表达式做比较。
 
-正则表达式是大小写敏感的,所以`The`不会匹配`the`。
+正则表达式是大小写敏感的,所以 `The` 不会匹配 `the`。
 
 
 "The" => The fat cat sat on the mat.
@@ -119,21 +120,21 @@
 |.|句号匹配任意单个字符除了换行符。|
 |[ ]|字符种类。匹配方括号内的任意字符。|
 |[^ ]|否定的字符种类。匹配除了方括号里的任意字符|
-|*|匹配>=0个重复的在*号之前的字符。|
-|+|匹配>=1个重复的+号前的字符。
-|?|标记?之前的字符为可选.|
-|{n,m}|匹配num个大括号之前的字符或字符集 (n <= num <= m).|
-|(xyz)|字符集,匹配与 xyz 完全相等的字符串.|
-|||或运算符,匹配符号前或后的字符.|
-|\|转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ ||
-|^|从开始行开始匹配.|
-|$|从末端开始匹配.|
+|*|匹配 >=0 个重复的在 * 号之前的字符。|
+|+|匹配 >=1 个重复的 + 号前的字符。|
+|?|标记 ? 之前的字符为可选。|
+|{n,m}|匹配 num 个大括号之前的字符或字符集 (n <= num <= m)。|
+|(xyz)|字符集,匹配与 xyz 完全相等的字符串。|
+|||或运算符,匹配符号前或后的字符。|
+|\|转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ ||
+|^|从开始行开始匹配。|
+|$|从末端开始匹配。|
 
 ## 2.1 点运算符 `.`
 
-`.`是元字符中最简单的例子。
-`.`匹配任意单个字符,但不匹配换行符。
-例如,表达式`.ar`匹配一个任意字符后面跟着是`a`和`r`的字符串。
+`.` 是元字符中最简单的例子。
+`.` 匹配任意单个字符,但不匹配换行符。
+例如,表达式 `.ar` 匹配一个任意字符后面跟着是 `a` 和 `r` 的字符串。
 
 
 ".ar" => The car parked in the garage.
@@ -147,7 +148,7 @@
 方括号用来指定一个字符集。
 在方括号中使用连字符来指定字符集的范围。
 在方括号中的字符集不关心顺序。
-例如,表达式`[Tt]he` 匹配 `the` 和 `The`。
+例如,表达式 `[Tt]he` 匹配 `the` 和 `The`。
 
 
 "[Tt]he" => The car parked in the garage.
@@ -156,7 +157,7 @@
 [在线练习](https://regex101.com/r/2ITLQ4/1)
 
 方括号的句号就表示句号。
-表达式 `ar[.]` 匹配 `ar.`字符串
+表达式 `ar[.]` 匹配 `ar.` 字符串。
 
 
 "ar[.]" => A garage is a good place to park a car.
@@ -167,7 +168,7 @@
 ### 2.2.1 否定字符集
 
 一般来说 `^` 表示一个字符串的开头,但它用在一个方括号的开头的时候,它表示这个字符集是否定的。
-例如,表达式`[^c]ar` 匹配一个后面跟着`ar`的除了`c`的任意字符。
+例如,表达式 `[^c]ar` 匹配一个后面跟着 `ar` 的除了 `c` 的任意字符。
 
 
 "[^c]ar" => The car parked in the garage.
@@ -182,8 +183,8 @@
 
 ### 2.3.1 `*` 号
 
-`*`号匹配 在`*`之前的字符出现`大于等于0`次。
-例如,表达式 `a*` 匹配0或更多个以a开头的字符。表达式`[a-z]*` 匹配一个行中所有以小写字母开头的字符串。
+`*` 号匹配在 `*` 之前的字符出现 `大于等于0` 次。
+例如,表达式 `a*` 匹配 0 或更多个以 a 开头的字符。表达式 `[a-z]*` 匹配一个行中所有以小写字母开头的字符串。
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -191,8 +192,8 @@
 
 [在线练习](https://regex101.com/r/7m8me5/1)
 
-`*`字符和`.`字符搭配可以匹配所有的字符`.*`。
-`*`和表示匹配空格的符号`\s`连起来用,如表达式`\s*cat\s*`匹配0或更多个空格开头和0或更多个空格结尾的cat字符串。
+`*` 字符和 `.` 字符搭配可以匹配所有的字符 `.*`。
+`*` 和表示匹配空格的符号 `\s` 连起来用,如表达式 `\s*cat\s*` 匹配 0 或更多个空格开头和 0 或更多个空格结尾的 cat 字符串。
 
 
 "\s*cat\s*" => The fat cat sat on the concatenation.
@@ -202,8 +203,8 @@
 
 ### 2.3.2 `+` 号
 
-`+`号匹配`+`号之前的字符出现 >=1 次。
-例如表达式`c.+t` 匹配以首字母`c`开头以`t`结尾,中间跟着至少一个字符的字符串。
+`+` 号匹配 `+` 号之前的字符出现 >=1 次。
+例如表达式 `c.+t` 匹配以首字母 `c` 开头以 `t` 结尾,中间跟着至少一个字符的字符串。
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -231,7 +232,7 @@
 ## 2.4 `{}` 号
 
 在正则表达式中 `{}` 是一个量词,常用来限定一个或一组字符可以重复出现的次数。
-例如, 表达式 `[0-9]{2,3}` 匹配最少 2 位最多 3 位 0~9 的数字。
+例如,表达式 `[0-9]{2,3}` 匹配最少 2 位最多 3 位 0~9 的数字。
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -241,6 +242,8 @@
 
 我们可以省略第二个参数。
 例如,`[0-9]{2,}` 匹配至少两位 0~9 的数字。
+如果逗号也省略掉则表示重复固定的次数。
+例如,`[0-9]{3}` 匹配3位数字
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -248,20 +251,19 @@
 
 [在线练习](https://regex101.com/r/Gdy4w5/1)
 
-如果逗号也省略掉则表示重复固定的次数。
-例如,`[0-9]{3}` 匹配3位数字
-
 
 "[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
 
[在线练习](https://regex101.com/r/Sivu30/1) -## 2.5 `(...)` 特征标群 - -特征标群是一组写在 `(...)` 中的子模式。`(...)` 中包含的内容将会被看成一个整体,和数学中小括号( )的作用相同。例如, 表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`。如果没有使用 `(...)` ,那么表达式 `ab*` 将匹配连续出现 0 或更多个 `b` 。再比如之前说的 `{}` 是用来表示前面一个字符出现指定次数。但如果在 `{}` 前加上特征标群 `(...)` 则表示整个标群内的字符重复 N 次。 - +## 2.5 `(...)` 捕获组 +特征标群是一组写在 `(...)` 中的子模式。`(...)` 中包含的内容将会被看成一个整体,和数学中小括号( )的作用相同。 +例如,表达式 `(ab)*` 匹配连续出现 0 或更多个 `ab`。 +如果没有使用 `(...)` ,那么表达式 `ab*` 将匹配连续出现 0 或更多个 `b`。 +再比如之前说的 `{}` 是用来表示前面一个字符出现指定次数。 +但如果在 `{}` 前加上特征标群 `(...)` 则表示整个标群内的字符重复 N 次。 我们还可以在 `()` 中用或字符 `|` 表示或。例如,`(c|g|p)ar` 匹配 `car` 或 `gar` 或 `par`.
@@ -270,6 +272,22 @@
 
 [在线练习](https://regex101.com/r/tUxrBG/1)
 
+请注意,特征标群不仅会匹配,而且会捕获,可以在宿主语言中被引用。
+宿主语言可以是 Python 或 JavaScript 或几乎任何在函数定义中实现正则表达式的语言。
+
+### 2.5.1 非捕获组
+
+非捕获组匹配字符但不捕获该组。 一个非捕获组由在括号 `(...)` 内的一个 `?` 后跟一个 `:` 表示。 例如,正则表达式 `(?:c|g|p)ar` 和 `(c|g|p)ar` 类似,可以匹配相同的字符,但不会创建捕获组。
+
+
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[在线练习](https://regex101.com/r/Rm7Me8/1) + +非捕获组用于查找和替换功能,或与捕获组混合以在生成任何其他类型的输出的时候,不记录匹配的内容。 +可参考 [4. 零宽度断言(前后预查)](#4-零宽度断言前后预查)。 + ## 2.6 `|` 或运算符 或运算符就表示或,用作判断条件。 @@ -282,11 +300,14 @@ [在线练习](https://regex101.com/r/fBXyX0/1) -## 2.7 转码特殊字符 +## 2.7 转义特殊字符 -反斜线 `\` 在表达式中用于转码紧跟其后的字符。用于指定 `{ } [ ] / \ + * . $ ^ | ?` 这些特殊字符。如果想要匹配这些特殊字符则要在其前面加上反斜线 `\`。 +反斜线 `\` 在表达式中用于转义紧跟其后的字符。 +用于指定 `{ } [ ] / \ + * . $ ^ | ?` 这些特殊字符。 +如果想要匹配这些特殊字符则要在其前面加上反斜线 `\`。 -例如 `.` 是用来匹配除换行符外的所有字符的。如果想要匹配句子中的 `.` 则要写成 `\.` 以下这个例子 `\.?`是选择性匹配`.` +例如 `.` 是用来匹配除换行符外的所有字符的。如果想要匹配句子中的 `.` 则要写成 `\.`。 +以下这个例子 `\.?` 是选择性匹配 `.`。
 "(f|c|m)at\.?" => The fat cat sat on the mat.
@@ -302,7 +323,9 @@
 
 `^` 用来检查匹配的字符串是否在所匹配字符串的开头。
 
-例如,在 `abc` 中使用表达式 `^a` 会得到结果 `a`。但如果使用 `^b` 将匹配不到任何结果。因为在字符串 `abc` 中并不是以 `b` 开头。
+例如,在 `abc` 中使用表达式 `^a` 会得到结果 `a`。
+但如果使用 `^b` 将匹配不到任何结果。
+因为字符串 `abc` 并不是以 b 开头。
 
 例如,`^(T|t)he` 匹配以 `The` 或 `the` 开头的字符串。
 
@@ -373,7 +396,7 @@
 
 ### 4.1 `?=...` 正先行断言
 
-`?=...` 正先行断言,表示第一部分表达式之后必须跟着 `?=...`定义的表达式。
+`?=...` 正先行断言,表示第一部分表达式之后必须跟着 `?=...` 定义的表达式(正先行断言)。
 
 返回结果只包含满足匹配条件的第一部分表达式。
 定义一个正先行断言要使用 `()`。在括号内部使用一个问号和等号: `(?=...)`。
@@ -389,7 +412,7 @@
 
 ### 4.2 `?!...` 负先行断言
 
-负先行断言 `?!` 用于筛选所有匹配结果,筛选条件为 其后不跟随着断言中定义的格式。
+负先行断言 `?!` 用于筛选所有匹配结果,筛选条件为其后 不跟随着断言中定义的格式。
 `正先行断言`  定义和 `负先行断言` 一样,区别就是 `=` 替换成 `!` 也就是 `(?!...)`。
 
 表达式 `(T|t)he(?!\sfat)` 匹配 `The` 和 `the`,且其后不跟着 `(空格)fat`。
@@ -402,7 +425,7 @@
 
 ### 4.3 `?<= ...` 正后发断言
 
-正后发断言 记作`(?<=...)` 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。
+正后发断言记作 `(?<=...)`,用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。
 例如,表达式 `(?<=(T|t)he\s)(fat|mat)` 匹配 `fat` 和 `mat`,且其前跟着 `The` 或 `the`。
 
 
@@ -413,7 +436,7 @@
 
 ### 4.4 `?

From cc5f395184c8a77b4220448d97078dd228dcf124 Mon Sep 17 00:00:00 2001
From: Cygra 
Date: Wed, 4 May 2022 13:02:39 +0800
Subject: [PATCH 145/156] fix: spaces and period

---
 translations/README-cn.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translations/README-cn.md b/translations/README-cn.md
index d98f3c9b..c8925d1d 100644
--- a/translations/README-cn.md
+++ b/translations/README-cn.md
@@ -243,7 +243,7 @@
 我们可以省略第二个参数。
 例如,`[0-9]{2,}` 匹配至少两位 0~9 的数字。
 如果逗号也省略掉则表示重复固定的次数。
-例如,`[0-9]{3}` 匹配3位数字
+例如,`[0-9]{3}` 匹配 3 位数字。
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.

From d9f1393d0eaaa338843b98a63f7013fde1e7cf0a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E6=9C=A8=E5=8D=97?= <442951562@qq.com>
Date: Fri, 8 Jul 2022 21:18:23 +0800
Subject: [PATCH 146/156] Correct a mistake in Chinese version

---
 translations/README-zh-simple.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/translations/README-zh-simple.md b/translations/README-zh-simple.md
index d8e0f60c..83b4d8ab 100644
--- a/translations/README-zh-simple.md
+++ b/translations/README-zh-simple.md
@@ -35,7 +35,7 @@
 ## 什么是正则表达式?
 
 [![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex)
- 
+
 > 正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子.
 
 
@@ -468,7 +468,7 @@
 
 像之前介绍的 `(^,$)` 用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 `m`.
 
-例如, 表达式 `/at(.)?$/gm` 表示在待检测字符串每行的末尾搜索 `at`后跟一个或多个 `.` 的字符串, 并返回全部结果.
+例如, 表达式 `/at(.)?$/gm` 表示在待检测字符串每行的末尾搜索 `at`后跟0个或1个 `.` 的字符串, 并返回全部结果.
 
 
 "/.at(.)?$/" => The fat

From e5058aee378c72356a84a792c941715b7235f620 Mon Sep 17 00:00:00 2001
From: Mari Adhari <74663874+mariadhari6@users.noreply.github.com>
Date: Sat, 13 Aug 2022 16:34:16 +0700
Subject: [PATCH 147/156] Create README-id.md

---
 translations/README-id.md | 604 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 604 insertions(+)
 create mode 100644 translations/README-id.md

diff --git a/translations/README-id.md b/translations/README-id.md
new file mode 100644
index 00000000..548aec16
--- /dev/null
+++ b/translations/README-id.md
@@ -0,0 +1,604 @@
+

+
+ + Learn Regex + +

+ +## Terjemahan: + +* [English](README.md) +* [German](translations/README-de.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) +* [Русский](translations/README-ru.md) +* [Tiếng Việt](translations/README-vn.md) +* [Bahasa Indonesia](translations/README-id.md) +* [فارسی](translations/README-fa.md) +* [עברית](translations/README-he.md) + + +## Apa itu Ekspresi Reguler? + +

+ + Download PDF + +

+ +> Ekspresi reguler adalah sekelompok karakter atau simbol yang digunakan untuk menemukan pola tertentu dalam sebuah teks. + +Ekspresi reguler adalah pola yang dicocokkan dengan string subjek dari +kiri ke kanan. Ekspresi reguler digunakan untuk mengganti teks dalam string, +memvalidasi formulir, mengekstrak substring dari string berdasarkan kecocokan pola, +dan masih banyak lagi. Istilah "ekspresi reguler" adalah suap, jadi kamu biasanya akan +temukan istilah yang disingkat "regex" atau "regexp". + +Bayangkan Anda sedang menulis aplikasi dan Anda ingin menetapkan aturan kapan a +pengguna memilih nama pengguna mereka. Kami ingin mengizinkan nama pengguna berisi huruf, +angka, garis bawah, dan tanda hubung. Kami juga ingin membatasi jumlah karakter +di username agar tidak terlihat jelek. Kita dapat menggunakan ekspresi reguler berikut untuk +memvalidasi nama pengguna: + +

+

+ Regular expression +

+ +Ekspresi reguler di atas dapat menerima string `john_doe`, `jo-hn_doe` dan +`john12_as`. Itu tidak cocok dengan `Jo` karena string itu berisi huruf besar +surat dan juga terlalu pendek. + +## Table of Contents + +- [Pencocokan Dasar](#1-basic-matchers) +- [Karakter Meta](#2-meta-characters) + - [Perhentian Penuh](#21-the-full-stop) + - [Set Karakter](#22-character-sets) + - [Set Karakter yang Dinegasikan](#221-negated-character-sets) + - [Pengulangan](#23-repetitions) + - [Tanda Bintang](#231-the-star) + - [Tanda Tambah](#232-the-plus) + - [Tanda Tanya](#233-the-question-mark) + - [Kurung Kurawal](#24-braces) + - [Menangkap Grup](#25-capturing-groups) + - [Grup yang Tidak Menangkap](#251-non-capturing-groups) + - [Alternasi](#26-alternation) + - [Karakter Spesial](#27-escaping-special-characters) + - [Anchor Text](#28-anchors) + - [Tanda Sisipan](#281-the-caret) + - [Tanda Dollar](#282-the-dollar-sign) +- [Set Karakter Singkatan](#3-shorthand-character-sets) +- [Melihat](#4-lookarounds) + - [Pandangan ke Depan Positif](#41-positive-lookahead) + - [Pandangan ke Depan Negatif](#42-negative-lookahead) + - [Pandangan Positif ke Belakang](#43-positive-lookbehind) + - [Pandangan negatif ke belakang](#44-negative-lookbehind) +- [Bendera](#5-flags) + - [Tidak peka huruf besar/kecil](#51-case-insensitive) + - [Pencarian Global](#52-global-search) + - [Multiline](#53-multiline) +- [Greedy vs Lazy Matching](#6-greedy-vs-lazy-matching) + +## 1. Pencocokan Dasar + +Ekspresi reguler hanyalah pola karakter yang kita gunakan untuk melakukan +pencarian dalam sebuah teks. Misalnya, ekspresi reguler `the` berarti: huruf +`t`, diikuti huruf `h`, diikuti huruf `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/dmRygT/1) + +Ekspresi reguler `123` cocok dengan string `123`. Ekspresi reguler adalah +dicocokkan dengan string input dengan membandingkan setiap karakter di reguler +ekspresi ke setiap karakter dalam string input, satu demi satu. Reguler +ekspresi biasanya peka huruf besar/kecil sehingga ekspresi reguler `The` akan +tidak cocok dengan string `the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/1paXsy/1) + +## 2. Karakter Meta + +Karakter meta adalah blok bangunan ekspresi reguler. Meta +karakter tidak berdiri sendiri tetapi sebaliknya ditafsirkan dalam beberapa +cara spesial. Beberapa karakter meta memiliki arti khusus dan tertulis di dalamnya +tanda kurung siku. Karakter metanya adalah sebagai berikut: + +|Meta karakter|Deskripsi| +|:----:|----| +|.|Titik cocok dengan karakter tunggal apa pun kecuali jeda baris.| +|[ ]|Kelas karakter. Mencocokkan karakter apa pun yang ada di antara tanda kurung siku.| +|[^ ]|Kelas karakter yang dinegasikan. Cocok dengan karakter apa pun yang tidak ada di antara tanda kurung siku| +|*|Mencocokkan dengan 0 atau lebih pengulangan dari simbol sebelumnya.| +|+|Mencocokkan 1 atau lebih pengulangan dari simbol sebelumnya.| +|?|Jadikan simbol sebelumnya opsional.| +|{n,m}|Kurung Kurawal. Mencocokkan setidaknya "n" tetapi tidak lebih dari "m" pengulangan simbol sebelumnya.| +|(xyz)|Kelompok karakter. Mencocokkan karakter xyz dalam urutan yang tepat.| +|||Alternasi. Mencocokkan dengan karakter sebelum atau karakter setelah simbol.| +|\|Meloloskan dari karakter berikutnya. Ini memungkinkan Anda untuk mencocokkan karakter yang dipesan [ ] ( ) { } . * + ? ^ $ \ || +|^|Mencocokkan dengan awal input.| +|$|Mencocokkan dengan akhir input.| + +## 2.1 Perhentian Penuh + +Tanda titik `.` adalah contoh paling sederhana dari karakter meta. Karakter meta `.` +cocok dengan karakter tunggal apa pun. Itu tidak akan cocok dengan karakter kembali atau baris baru. +Misalnya, ekspresi reguler `.ar` berarti: karakter apa pun, diikuti oleh +huruf `a`, diikuti dengan huruf `r`. + +
+".ar" => The car parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/xc9GkU/1) + +## 2.2 Set Karakter + +Kumpulan karakter juga disebut kelas karakter. Tanda kurung siku digunakan untuk +menentukan set karakter. Gunakan tanda hubung di dalam set karakter untuk menentukan +jangkauan karakter. Urutan rentang karakter di dalam tanda kurung siku +tidak masalah. Misalnya, ekspresi reguler `[Tt]he` berarti: huruf besar +`T` atau huruf kecil `t`, diikuti huruf `h`, diikuti huruf `e`. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/2ITLQ4/1) + +Sebuah periode di dalam set karakter, bagaimanapun, berarti periode literal. yang biasa +ekspresi `ar[.]` berarti: karakter huruf kecil `a`, diikuti dengan huruf `r`, +diikuti dengan karakter titik `.`. + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Set Karakter yang Dinegasikan + +Secara umum, simbol tanda sisipan mewakili awal string, tetapi ketika itu +diketik setelah kurung siku pembuka itu meniadakan set karakter. Untuk +contoh, ekspresi reguler `[^c]ar` berarti: karakter apa pun kecuali `c`, +diikuti dengan karakter `a`, diikuti dengan huruf `r`. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/nNNlq3/1) + +## 2.3 Pengulangan + +Karakter meta `+`, `*` atau `?` digunakan untuk menentukan berapa kali a +subpola dapat terjadi. Karakter meta ini bertindak secara berbeda di berbagai +situasi. + +### 2.3.1 Tanda Bintang + +Simbol `*` cocok dengan nol atau lebih pengulangan dari pencocokan sebelumnya. Itu +ekspresi reguler `a*` berarti: nol atau lebih pengulangan dari huruf kecil sebelumnya +karakter `a`. Tetapi jika itu muncul setelah set karakter atau kelas maka ia menemukan +pengulangan seluruh set karakter. Misalnya, ekspresi reguler +`[a-z]*` artinya: sejumlah huruf kecil dalam satu baris. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/7m8me5/1) + +Simbol `*` dapat digunakan dengan karakter meta `.` untuk mencocokkan string apa pun dari +karakter `.*`. Simbol `*` dapat digunakan dengan karakter spasi putih `\s` +untuk mencocokkan string karakter spasi. Misalnya, ungkapan +`\s*cat\s*` artinya: nol spasi atau lebih, diikuti dengan huruf kecil `c`, +diikuti dengan huruf kecil `a`, diikuti dengan huruf kecil `t`, +diikuti oleh nol atau lebih spasi. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 Tanda Tambah + +Simbol `+` cocok dengan satu atau lebih pengulangan karakter sebelumnya. Untuk +contoh, ekspresi reguler `c.+t` berarti: huruf kecil `c`, diikuti oleh +setidaknya satu karakter, diikuti dengan huruf kecil `t`. Itu perlu +mengklarifikasi bahwa `t` adalah `t` terakhir dalam kalimat. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 Tanda Tanya + +Dalam ekspresi reguler, karakter meta `?` membuat karakter sebelumnya +opsional. Simbol ini cocok dengan nol atau satu contoh karakter sebelumnya. +Misalnya, ekspresi reguler `[T]?he` artinya: Huruf besar opsional +`T`, diikuti dengan huruf kecil `h`, diikuti dengan huruf kecil `e`. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/kPpO2x/1) + +## 2.4 Braces + +Dalam ekspresi reguler, kurung kurawal (juga disebut quantifier) ​​digunakan untuk +tentukan berapa kali karakter atau sekelompok karakter dapat +ulang. Misalnya, ekspresi reguler `[0-9]{2,3}` berarti: Setidaknya cocok +2 digit, tetapi tidak lebih dari 3, mulai dari 0 hingga 9. + +
+"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/juM86s/1) + +Kita bisa meninggalkan nomor kedua. Misalnya, ekspresi reguler +`[0-9]{2,}` berarti: Mencocokkan 2 digit atau lebih. Jika kita juga menghapus koma, +ekspresi reguler `[0-9]{3}` berarti: Sama persis dengan 3 digit. + +
+"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Test the regular expression](https://regex101.com/r/Sivu30/1) + +## 2.5 Menangkap Grup + +Grup penangkap adalah grup subpola yang ditulis di dalam tanda kurung +`(...)`. Seperti yang dibahas sebelumnya, dalam ekspresi reguler, jika kita menempatkan quantifier +setelah karakter maka akan mengulangi karakter sebelumnya. Tetapi jika kita menempatkan quantifier +setelah grup penangkap kemudian mengulangi seluruh grup penangkap. Sebagai contoh, +ekspresi reguler `(ab)*` cocok dengan nol atau lebih pengulangan karakter +"ab". Kita juga dapat menggunakan karakter meta `|` bergantian di dalam grup penangkap. +Misalnya, ekspresi reguler `(c|g|p)ar` berarti: huruf kecil `c`, +`g` atau `p`, diikuti oleh `a`, diikuti oleh `r`. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/tUxrBG/1) + +Perhatikan bahwa menangkap grup tidak hanya cocok, tetapi juga menangkap, karakter untuk digunakan dalam +bahasa induk. Bahasa induk bisa berupa Python atau JavaScript atau hampir semua +bahasa yang mengimplementasikan ekspresi reguler dalam definisi fungsi. + +### 2.5.1 Grup yang Tidak Menangkap + +Grup yang tidak menangkap adalah grup yang cocok dengan karakter tetapi +tidak menangkap kelompok. Grup yang tidak menangkap dilambangkan dengan `?` diikuti oleh `:` +dalam tanda kurung `(...)`. Misalnya, ekspresi reguler `(?:c|g|p)ar` mirip dengan +`(c|g|p)ar` karena cocok dengan karakter yang sama tetapi tidak akan membuat grup tangkapan. + +
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Test the regular expression](https://regex101.com/r/Rm7Me8/1) + +Grup yang tidak menangkap dapat berguna saat digunakan dalam fungsi temukan-dan-ganti atau +ketika dicampur dengan grup penangkap untuk menjaga gambaran umum saat memproduksi jenis keluaran lainnya. +Lihat juga [4. Melihat-lihat](#4-lookaround). + +## 2.6 Alternasi + +Dalam ekspresi reguler, bilah vertikal `|` digunakan untuk mendefinisikan pergantian. +Pergantian seperti pernyataan OR antara beberapa ekspresi. Sekarang, Anda mungkin +berpikir bahwa set karakter dan pergantian bekerja dengan cara yang sama. Tapi yang besar +perbedaan antara set karakter dan pergantian adalah bahwa set karakter bekerja di +tingkat karakter tetapi pergantian bekerja pada tingkat ekspresi. Misalnya, +ekspresi reguler `(T|t)he|car` berarti: baik (huruf besar `T` atau huruf kecil +`t`, diikuti dengan huruf kecil `h`, diikuti dengan huruf kecil `e`) ATAU +(huruf kecil `c`, diikuti dengan huruf kecil `a`, diikuti oleh +huruf kecil `r`). Perhatikan bahwa saya menyertakan tanda kurung untuk kejelasan, untuk menunjukkan bahwa salah satu ekspresi +dalam tanda kurung dapat dipenuhi dan itu akan cocok. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/fBXyX0/1) + +## 2.7 Karakter Spesial + +Garis miring terbalik `\` digunakan dalam ekspresi reguler untuk keluar dari karakter berikutnya. Ini +memungkinkan kita untuk menyertakan karakter yang dicadangkan seperti `{ } [ ] / \ + * . $ ^ | ?` sebagai karakter yang cocok. Untuk menggunakan salah satu karakter khusus ini sebagai karakter yang cocok, awali dengan `\`. + +Misalnya, ekspresi reguler `.` digunakan untuk mencocokkan karakter apa pun kecuali a +garis baru. Sekarang, untuk mencocokkan `.` dalam string input, ekspresi reguler +`(f|c|m)at\.?` artinya: huruf kecil `f`, `c` atau `m`, diikuti dengan huruf kecil +`a`, diikuti dengan huruf kecil `t`, diikuti dengan `.` . opsional +karakter. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/DOc5Nu/1) + +## 2.8 Anchor Text + +Dalam ekspresi reguler, kami menggunakan jangkar untuk memeriksa apakah simbol yang cocok adalah +simbol awal atau simbol akhir dari string input. Jangkar terdiri dari dua jenis: +Tipe pertama adalah tanda sisipan `^` yang memeriksa apakah karakter yang cocok adalah yang pertama +karakter input dan tipe kedua adalah tanda dolar `$` yang memeriksa apakah cocok +karakter adalah karakter terakhir dari string input. + +### 2.8.1 Tanda Sisipan + +Simbol tanda sisipan `^` digunakan untuk memeriksa apakah karakter yang cocok adalah karakter pertama +dari string masukan. Jika kita menerapkan ekspresi reguler berikut `^a` (artinya 'a' harus +karakter awal) ke string `abc`, itu akan cocok dengan `a`. Tapi jika kita melamar +ekspresi reguler `^b` ke string di atas, itu tidak akan cocok dengan apa pun. +Karena dalam string `abc`, "b" bukanlah karakter awal. Mari lihat +di ekspresi reguler lain `^(T|t)he` yang artinya: huruf besar `T` atau +huruf kecil `t` harus menjadi karakter pertama dalam string, diikuti oleh a +huruf kecil `h`, diikuti dengan huruf kecil `e`. + +
+"(T|t)he" => The car is parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Tanda Dolar + +Tanda dolar `$` digunakan untuk memeriksa apakah karakter yang cocok adalah karakter terakhir +dalam tali. Misalnya, ekspresi reguler `(at\.)$` berarti: a +huruf kecil `a`, diikuti dengan huruf kecil `t`, diikuti oleh `.` +karakter dan matcher harus berada di akhir string. + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/t0AkOd/1) + +## 3. Set Karakter Singkatan + +Ada sejumlah singkatan yang mudah digunakan untuk set karakter yang umum digunakan/ +ekspresi reguler: + +|Singkatan|Deskripsi| +|:----:|----| +|.|Karakter apa pun kecuali baris baru| +|\w|Mencocokkan karakter alfanumerik: `[a-zA-Z0-9_]`| +|\W|Mencocokkan karakter non-alfanumerik: `[^\w]`| +|\d|Mencocokkan digit: `[0-9]`| +|\D|Mencocokkan non-digit: `[^\d]`| +|\s|Mencocokkan karakter spasi putih: `[\t\n\f\r\p{Z}]`| +|\S|Mencocokkan karakter non-spasi: `[^\s]`| + +## 4. Melihat-lihat + +Melihat ke belakang dan melihat ke depan (juga disebut melihat sekeliling) adalah jenis tertentu dari +***grup non-penangkapan*** (digunakan untuk mencocokkan pola tetapi tanpa menyertakannya dalam pencocokan +daftar). Lookarounds digunakan ketika sebuah pola harus +didahului atau diikuti oleh pola lain. Misalnya, bayangkan kita ingin mendapatkan semua +angka yang didahului oleh karakter `$` dari string +`$4,44 dan $10,88`. Kami akan menggunakan ekspresi reguler berikut `(?<=\$)[0-9\.]*` +yang artinya: dapatkan semua angka yang mengandung karakter `.` dan didahului +oleh karakter `$`. Ini adalah lookaround yang biasa digunakan +ekspresi: + +|Simbol|Deskripsi| +|:----:|----| +|?=|Pandangan ke Depan Positif| +|?!|Melihat ke Depan Negatif| +|?<=|Tampilan Positif di Belakang| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. +
+ +[Uji ekspresi reguler](https://regex101.com/r/IDDARt/1) + +### 4.2 Pandangan ke Depan Negatif + +Pandangan negatif ke depan digunakan ketika kita perlu mendapatkan semua kecocokan dari string input +yang tidak mengikuti pola tertentu. Sebuah lookahead negatif ditulis dengan cara yang sama seperti a +pandangan positif ke depan. Satu-satunya perbedaan adalah, alih-alih tanda sama dengan `=`, kami +gunakan tanda seru `!` untuk menunjukkan negasi yaitu `(?!...)`. Yuk simak berikut ini +ekspresi reguler `(T|t)he(?!\sfat)` yang artinya: dapatkan semua kata `The` atau `the` +dari string input yang tidak diikuti oleh karakter spasi dan kata `fat`. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/V32Npg/1) + +### 4.3 Pandangan Positif ke Belakang + +Positif melihat ke belakang digunakan untuk mendapatkan semua kecocokan yang didahului oleh a +pola tertentu. Positif lookbehinds ditulis `(?<=...)`. Misalnya, +ekspresi reguler `(?<=(T|t)he\s)(fat|mat)` artinya: dapatkan semua kata `fat` atau `mat` +dari string input yang datang setelah kata `The` atau `the`. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Test the regular expression](https://regex101.com/r/avH165/1) + +### 4.4 Pandangan negatif ke belakang + +Pandangan belakang negatif digunakan untuk mendapatkan semua kecocokan yang tidak didahului oleh a +pola tertentu. Tampilan negatif di belakang ditulis `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. +
+ +[Test the regular expression](https://regex101.com/r/8Efx5G/1) + +## 5. Bendera + +Bendera juga disebut pengubah karena mereka memodifikasi output dari regular +ekspresi. Bendera ini dapat digunakan dalam urutan atau kombinasi apa pun, dan merupakan +bagian integral dari RegExp. + +|Bendera|Deskripsi| +|:----:|----| +|i|Tidak peka huruf besar/kecil: Pencocokan tidak peka huruf besar/kecil.| +|g|Penelusuran Global: Cocokkan semua instance, bukan hanya yang pertama.| +|m|Multiline: Karakter meta jangkar bekerja di setiap baris.| + +### 5.1 Tidak peka huruf besar/kecil + +Pengubah `i` digunakan untuk melakukan pencocokan case-insensitive. Misalnya, +ekspresi reguler `/The/gi` berarti: huruf besar `T`, diikuti dengan huruf kecil +`h`, diikuti oleh `e`. Dan di akhir ekspresi reguler +flag `i` memberitahu mesin ekspresi reguler untuk mengabaikan kasus ini. Sebisa kamu +lihat, kami juga menyediakan flag `g` karena kami ingin mencari pola di +seluruh string masukan. + +
+"The" => The fat cat sat on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/ahfiuh/1) + +### 5.2 Pencarian Global + +Pengubah `g` digunakan untuk melakukan kecocokan global (menemukan semua kecocokan daripada +berhenti setelah pertandingan pertama). Misalnya, ekspresi reguler`/.(at)/g` +berarti: karakter apa pun kecuali baris baru, diikuti dengan huruf kecil `a`, +diikuti dengan huruf kecil `t`. Karena kami menyediakan flag `g` di akhir +ekspresi reguler, sekarang akan menemukan semua kecocokan dalam string input, bukan hanya yang pertama (yang merupakan perilaku default). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/dO1nef/1) + +### 5.3 Multiline + +Pengubah `m` digunakan untuk melakukan pencocokan multi-baris. Seperti yang telah kita bahas sebelumnya, +jangkar `(^, $)` digunakan untuk memeriksa apakah suatu pola ada di awal input atau +tamat. Tetapi jika kita ingin jangkar bekerja pada setiap baris, kita menggunakan +bendera `m`. Misalnya, ekspresi reguler `/at(.)?$/gm` berarti: huruf kecil +`a`, diikuti dengan huruf kecil `t` dan, opsional, apa pun kecuali +baris baru. Dan karena flag `m`, mesin ekspresi reguler sekarang cocok dengan pola +di akhir setiap baris dalam sebuah string. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Uji ekspresi reguler](https://regex101.com/r/E88WE2/1) + +## 6. Greedy vs Lazy Matching +Secara default, regex akan melakukan kecocokan greedy, yang berarti kecocokan akan berlangsung selama +mungkin. Kita dapat menggunakan `?` untuk mencocokkan dengan cara yang lazy, yang berarti pencocokan harus sesingkat mungkin. + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Uji ekspresi reguler](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?at)/" => The fat cat sat on the mat. 
+ + +[Uji ekspresi reguler](https://regex101.com/r/AyAdgJ/2) + + +## Kontribusi + +* Buka pull request dengan peningkatan +* Diskusikan ide dalam issue +* Sebarkan materinya +* Jangkau dengan umpan balik apa pun [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) + +## Lisensi + +MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) From 881a4bd4f17bbecbe66d5b2a5ab94802a23ec891 Mon Sep 17 00:00:00 2001 From: Mari Adhari <74663874+mariadhari6@users.noreply.github.com> Date: Sat, 13 Aug 2022 16:38:26 +0700 Subject: [PATCH 148/156] update: add indonesian translation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9c1c4b2e..e60496fd 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ * [Polish](translations/README-pl.md) * [Русский](translations/README-ru.md) * [Tiếng Việt](translations/README-vn.md) +* [Bahasa Indonesia](translations/README-id.md) * [فارسی](translations/README-fa.md) * [עברית](translations/README-he.md) From 172a004d4643d67f40702ad55c701acfed467aba Mon Sep 17 00:00:00 2001 From: Mari Adhari <74663874+mariadhari6@users.noreply.github.com> Date: Sat, 13 Aug 2022 16:49:57 +0700 Subject: [PATCH 149/156] add: indonesian image translation --- img/regexp-id.png | Bin 0 -> 7470 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/regexp-id.png diff --git a/img/regexp-id.png b/img/regexp-id.png new file mode 100644 index 0000000000000000000000000000000000000000..9a93f87cda2e234dcaa3caaee457b8f57064b6a2 GIT binary patch literal 7470 zcmd5=XH=70mqxjYf{0fPRS>C4=%EM%QHp|;&=RBtFcfK0loDw+id5+Y1O({>P(mj( z>5za(=p{%=qzkVQstotn%(uRox!-)hX0LVD^PauW*=L`#)_(S0?^^@?`^=17jC6E# z%-UKSMs#$i(R6gD3eVC1rLm%aa{{NH8r@erHQpl@d@?!jp=I`zj*f}-uW^bl?LEhd zGR#2NMDqmyKM3s+`1(m4;?Ioqjp;5~2is)bIeyVB#rNT-hrxh*dF;m5mf26_cdFN5 z^epH8V3h0-#Av6so;uA?zjG&zj_xXhw#Ho(zxQhy=lzS78bY)AYz+q4Jb$d4k$n*s z1HX=g$vuAv+8UJX!2Q-&Cj3F?IJ@<rHHUJ#0bR!8nTK!vHH$DVAEP>ZqI>S&-^wmPF>Na4H?}f(aFO z=xcW5$$ql7C?`woi2?T zwnAr(Feyc-3NJZZk8>6dv26&;PQX->M+88$~?@m_SSDe!)U9vA4N|28am)Rl>K|5D5Fg%At2C`fGkAYMhkYN2{`5!#%mSZQRTga; zRAgb!k8%$@+Z&rxNL4pn6F9Q9Fx(pr`u0~6|C8t@(nc3Dlvr#cupHn*fG$6Lw_C)U zx8=%9^oz5p43A&@4-h(tNjd9ld2wO?mlt)^yr6GBHD%z*7LGHoss(Y?vaWqLWGQ2z zY-IroqA9?{&v0O2H$QQh%a??$x^;{NIminnpRfC^f(2_Q7#xFyBR<{siAI}Bp4}l# zk@1xKD`C@g@wxj-QTRDRySs*m?SKOQ8oWA^Tl$ zGgG`e6uo|Q3JB8rLTuOwi(fgbK4Q)F6ZvgbbG`faD>Izf2Xp4H*4zy_+uUTok`+-< zdTZol%$|dH@~T{+@vJ};HpX#;6_#6_i}zZ)>#|#C3t*vcGcuQWdZ)U}kN?DPMH6C7 z9KAUgytLoHV1=6%BRXOh-lDF(JoA zEX$?Sx5|L*z{7L>P_||3eIipxj2Ce1&i z!wG}yU%Gz##U!_fOHi27s1I(oomo9PIvw~QQyumo<9smVZdh)D}sL8u#p;3VXNh?s+@@YHYf<@ z)M2bAXZrabbbGtFhL~_y-r@cyJFq(5nMje!fQ7l3Xc+bDt zRpo+|6E(86nTeJXIn<2RB7m>$6L6--xG1wuXlC^Izz}`<2sXn7X;(nqSiZ@sa#n_j6Ie9cRH*kgND-_)J0!Jn?-r#e`h@yM za@$hZKbP7)xq#G9V>d@lJ{(B6T8UPQu>~%6np5XeeTukPYX}g2&|N$f;GGw zC)*!V)<|+2a+1EuG)UB+5O*A(pPXYnJW#x0W|o#F@*EBsPiNosU>dUkxtI@J-AOI* zp_cyggBedr*Q?v4JKh(?#Y-&YR!g`FM^u}x2+60QejQez;~sKIU0OLpPYXmvHyV9# ziYix{i_Cw-U)RgG(c&(_F{!j^M`1hm?=Y6!C#>j6+CSHS}$71cR?)OWkQx`4dLRn+GBmloGZOjJ*qipnd(3LJvXA|ArWKPTWPSUy) z(5?~1$r9_`Q=<_)VCMfd8ZxxRGqEIYe*lt98+EKgBXX6%410e1iyfEFJBkw6DARF- z{db1yfEKsqQLOLsg#?CV5VRxP%whYGr1|`H`PNYXd}Ex0m#jqy=K&KWlB`h9(EQ2z zk6&>Wz?Y1ut_PCN&F{|8LZiH>f?IB^}ke-|Ep zimVDMLiz+u`y9qMxhp=l0`jf_vj$aNx7e6}GyJLf) z-OI?h2}qX;w=@mq%OnTu#^>{okkET)2+E}&`U#az<}U|hU4=R`Kmk>B3fBh$( z5=fpmKKh2g*f%lpx&&L|75n_25V9=uY5!+f?C%N_MX3Eu3fhskq3uQAciPeZBsOa@ z)wC+tnjUV#S@XLGxAF%4APIJmU$N_Y-tOjz%^E@?IP#&Y?Tp;jj-+Fml2SLM_ep)L zl{Y^PG8SN6DT8@`s{uy$E~Ghzayff8H%Z8D6vlVt_HGCCmel){H7}-Khm#*?+h=|^ zDo2pL-&oV@8DFDfXo_Fcf|iB%E(0UWb2dhc&LjI=T-D5&(Sk6iOl)_jXgLkq7IFRV z^ILsT9jrvZ^uSX>g1C?{yzFBTftOo(g0jTL8#Ie3kY}-|TbcAbtsEdP_q-9kBGDMD zzV<9*e&<|U+^|;hMHvq8Ep15UW8v-R_c^RZ{87<56ZlrMr48YxjlPv{{e;2o#aoG9 z>NRM6ONaFlY6nxOG*?7tO;-BouOH7sdcV)t!%9%o;X%JYfTU$`>mJ`90Iu7lvMS72 z&(1YV-7s`1r?szzmt9qNg&KU3TQAf(Q7YYoLoK^RNW{;t1LjZ z=sm_bn#_GbJG8-h*eAV3%DhL!i7T?M)3?j5#;Wg-`;nmIiSbT4T4yZprjQFfbEoGRInFholaHwBX`u(nc zYoo`Gv+uX2=hsEJSMToF^*>RYo+{E#VwHX!=}B-|b{K;?z}poeJW4Ls9676eL zxh&jD^9V&ZRXW9TFd=@ke{HMovn>$SuDaGprf~Y?6MbLYbD=cVsF+Fogghrt1_jg7 z9LLd>u$5~_+2P&S1tWD7&X*&IC!qvf#grp&KJY}>UwF^Ln%YMwDbRgxRx?%m;x6E< z?wZ$3Jp7eDDjhom{ixbN|8k{nnkKd0`w4v{Vl`t_ClEDnY?&ppph#2(kE((vCgPq) zk0&1dd{4=MeD*&yOxgM&pGZ#Ct7CaauCbR8d7d=#eg5tG=*0S)Ol?yvnS(SFCL*^% za=(BLHp!nixZUE0MgaN&kLv;TK9M+zRS?%d@Wo$~7yiJ2DoK%!T_#4Vt{ET1j7=;`Tx zJCzvGNz*J0Qsty2`sUJ>0&+JZ&<4yr|%u+00>HZxMkcJ)pc&e6h z-sAkg>*8de)MeoJ)+1~ojL3-CiC zg(9QX`!M8-17q5XM+(?b9YR}LijelO*LHeWY&$X%La>lwLt^fF@UXbd;NyzPc-KLp zubh<48$)2oxw3gfVxM0VBUiH!~1c7OnzxaxBi7 z)}L-T_*Z2Uf!BN>3h|X7I?!;}6eQ(m0H{@O26TGWWfK5XSL%7-3b-iKdFEG>b7~)!Pp9g7u%;p+xJxf_^{!;g zF8V7|Ge{t;&ZJbvy-og0ZhTVT4ReXa2T5q)M#OS~6v~2EaO7@IEvM^V?6T$xmi8VUGP*HH@k3Xc*IIP~Zn<6ZvqXE?<^Dk&oRs?#~W zZz0He>S^jEOQafN0@in9H6tsODA-+*@jUgzSLDs!rew*C%;|)BvGurQ_XDE8# zenMZ)X%FERp~VA`v>cc=Z}{B-p4{QmG=$g?cM-I(oB;6EUA;~xUcZ3<6EFM=43cew z{m@UJ%70CBGewEzpE&nKks!iSpJKrA<@nsI*~Jf+m2X-TUT$&V_ zX5h{;1er@>I8n)B?L1UVPg`Qq$u$$dON0*M*rrD?@vabEx&+obp zibWW)sNeoS9jrcd*NO_fa9X%b8J;dGJNa$7Fx^mkaA2dEbA$8~BKFH?0e+Gx2-278 z2y!bdHSP^3X5Zg%(QZk@AdfKf%tt8OvVF|d-;O55Zs^A}zq;JsPK=EC_!f@~A70`& z#@r^IdlWXJkcA{v>yNqfL>8m61L2(&!cY_d?e#4_YuQnaz7k^Q?@RbRiIRuKxOuQKl2@T*dj+KdEfGh+bIVm{CpPt>$!i0p2Zun!s@*NN*0(aq@{@fm;P zLuBo`IDsC8X6A;=SCsYo5fVbg7n8g|Lm{i<(`s@z_ir_Od?^hz9wJ~O z2$8K|ZsuQp^%ucUFV{bffcN{jlG~eYY?B~^5#a>aM9eFKYozA=9C&W`_`2v^e=Rg( zYWGnc&xD-hw^jk#!>V>#GO@HoMg~aUO0#y#R5IcrN9^l?&6agsB1Z=$$=zVLbgG%0 zak}YPf*ZUS)(yH{zB^sA6KTJU*MfZ=j=O1K1gz`C$LrpC^dv!^3mbaycl00`W0Q&5P z_M$S7DbKxq!em32C_rl7|Jr=aM8UKduUPxQBZnyB3d7+Z0?MO%K3}2DHr#^)>$0(q z{>a!PXbllOuJ&xFMrlZS#!n2LbMqQ0|H)PXaY%ED`HJBa`w)&r6M^EGK3~stQ;ey~ z`QMX``>`#}zo~P^SAm6}C2liKF1~GQ-sAH=RiyF>XYa%4G|$5N`=vq1Z3o@76kG`8 z&gN=@49deYZ0ctAdG*u7HnsSeKLef{J5w1eQ5vyTZ=^CPdO7I)J3<lH z`;$yj7Up*{$o=j+sp$_KKzaW;b$N--!w`M6nHC7Ui?%T7cAL?7AOJZ^T$hs6i+_Ge z*3sWOU)DfFV!wWdvGhXvc(FQr95uD;;C+Qt7PzsV;8NCmgUHJMS?e-Wt&mh zcspxM*GDRfM{ah2fT~94SY(&=-Xa2zw)LIB6ZFQVG1E`yxx}{9Kh=#EvkkD!-}+VR zM0%b27NB-cUPry>^J4Alb1f5n5N6I%U`mYis^7z#6ncFQ55$QnQR-y+%j=i*x2n;4 z2s{4BPcbJ9MuF?-2(&F1@+g6$Yi#y6>N2l>6OnvSZlCE5zo*TmX_ZA=Y&fXDv%UF} z#V|iZm5qBiPClb5O-~3#%J|ripRk?8tZUEkC#qi(Fp*dG8zj@4N` zDQE1qn*-Z>g_=cU)s@@>@kLD2apM;m`hAJ4!j1^{wb9KKVCZE~M)+ Date: Fri, 21 Oct 2022 06:39:52 +0300 Subject: [PATCH 150/156] Russian language update Corrected some grammar and serious logical and factual mistakes. Updated header and footer, translated shields. --- translations/README-ru.md | 405 +++++++++++++++++++++----------------- 1 file changed, 219 insertions(+), 186 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 8cfe2c3e..10767210 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1,22 +1,14 @@


- - Learn Regex + + Учим регулярки -

-

- - - - - - -

-## Translations: +## Переводы: * [English](../README.md) +* [German](translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -32,28 +24,34 @@ * [فارسی](../translations/README-fa.md) * [עברית](translations/README-he.md) + ## Что такое Регулярное выражение? -[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) +[![](https://img.shields.io/badge/Загрузить%20PDF-0a0a0a.svg)](https://gum.co/learn-regex) -> Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте. +> Регулярное выражение — это группа букв или символов, которая используется для поиска определенного шаблона в тексте. -Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. -Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". +Регулярное выражение — это шаблон, сопоставляемый с искомой строкой слева +направо. Термин "Регулярное выражение" сложно произносить каждый раз, поэтому, +обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". Регулярные выражения используются для замен текста внутри строк, валидации форм, извлечений подстрок по определенным шаблонам и множества других вещей. -Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. -Для этого, используем следующее регулярное выражение: +Представьте, что вы пишете приложение и хотите установить правила, по которым +пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало +буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество +символов в имени пользователя, чтобы оно не выглядело безобразно. Для этого +используем следующее регулярное выражение: -

+

- Regular expression + Регулярное выражение

-Регулярное выражения выше может принимать строки `john_doe`,`jo-hn_doe` и `john12_as`. -Оно не валидирует `Jo`, поскольку эта строка содержит заглавные буквы, а также она слишком короткая. +Регулярное выражения выше может принимать строки `john_doe`,`jo-hn_doe` и +`john12_as`. Оно не валидирует `Jo`, поскольку эта строка содержит заглавные +буквы, а также она слишком короткая. ## Содержание @@ -68,8 +66,8 @@ - [Знак вопроса](#233-знак-вопроса) - [Фигурные скобки](#24-фигурные-скобки) - [Скобочные группы](#25-скобочные-группы) - - [Альтернация](#26-альтернация) - - [Экранирование](#27-экранирование) + - [Перечисление](#26-перечисление) + - [Экранирование спецсимволов](#27-экранирование-спецсимволов) - [Якоря](#28-якоря) - [Каретка](#281-каретка) - [Доллар](#282-доллар) @@ -83,12 +81,13 @@ - [Поиск без учета регистра](#51-поиск-без-учета-регистра) - [Глобальный поиск](#52-глобальный-поиск) - [Мультистроковый поиск](#53-мультистроковый-поиск) -- [Жадные vs ленивые квантификаторы](#6-жадные-vs-ленивые-квантификаторы) +- [Жадная и ленивая квантификация](#6-жадная-и-ленивая-квантификация) ## 1. Совпадения. -В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте. -Например, регулярное выражение `the` состоит из буквы `t`, за которой следует буква `h`, за которой следует буква `e`. +В сущности, регулярное выражение — это просто набор символов, который мы +используем для поиска в тексте. Например, регулярное выражение `the` состоит из +буквы `t`, за которой следует буква `h`, за которой следует буква `e`.
 "the" => The fat cat sat on the mat.
@@ -96,9 +95,11 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/dmRygT/1)
 
-Регулярное выражение `123` соответствует строке `123`. Регулярное выражение сопоставляется с входной строкой, сравнивая
-каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения
-обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке `the`.
+Регулярное выражение `123` соответствует строке `123`. Регулярное выражение
+сопоставляется с входной строкой посимвольно. Каждый символ в регулярном
+выражении сравнивается с каждым символом во входной строке, один символ за
+другим. Регулярные выражения обычно чувствительны к регистру, поэтому регулярное
+выражение `The` не будет соответствовать строке `the`.
 
 
 "The" => The fat cat sat on the mat.
@@ -108,30 +109,32 @@
 
 ## 2. Метасимволы
 
-Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы не означают что-то сами по себе,
-вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют
-особые обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы:
+Метасимволы — это строительные блоки для регулярных выражений. Метасимволы не
+ищутся в строке как есть, они интерпретируются особым образом. Некоторые
+метасимволы имеют особое значение и пишутся в квадратных скобках. Существуют
+следующие метасимволы:
 
-|Метасимволы|Описание|
+|Метасимвол|Описание|
 |:----:|----|
-|.|Точка соответствует любому отдельному символу, кроме разрыва строки.|
-|[ ]|Класс символов. Находить любые символы заключенные в квадратных скобках.|
-|[^ ]|Отрицание класа символов. Находить любые символы не заключенные в квадратных скобках.|
-|*|Находить 0 или более повторений предыдущего символа.|
-|+|Находить 1 или более повторений предыдущего символа.|
-|?|Сделать предыдущий символ необязательным.|
-|{n,m}|Скобки. Находить по крайней мере "n" но не более чем "m" повторений предыдущего символа.|
-|(xyz)|Группа символов. Находить только символы xyz в указанном порядке.|
-|||Чередование. Находить либо буквы до, либо буквы после символа.|
-|\|Экранирование. Позволяет находить зарезервированные символы: [ ] ( ) { } . * + ? ^ $ \ ||
+|.|Точка соответствует любому отдельному символу, кроме перевода строки.|
+|[ ]|Класс символов. Заменяет любой из символов, заключенных в квадратных скобках.|
+|[^ ]|Отрицание класа символов. Соответствует любом символу, не содержащемуся в квадратных скобках.|
+|\*|Искать 0 или более повторов предыдущего символа.|
+|+|Искать 1 или более повторов предыдущего символа.|
+|?|Делает предыдущий символ необязательным.|
+|{n,m}|Скобки. Искать не менее "n" и не более "m" повторов предыдущего символа.|
+|(xyz)|Группа символов. Искать только символы xyz в указанном порядке.|
+|||Чередование. Искать либо знаки до этого символа, либо знаки после символа.|
+|\|Экранирование следующего символа. Позволяет искать специальные знаки: [ ] ( ) { } . * + ? ^ $ \ ||
 |^|Обозначает начало пользовательского ввода.|
 |$|Обозначает конец пользовательского ввода.|
 
 ## 2.1 Точка
 
-Точка `.` это простейший пример метасимвола. Метасимвол `.`
-находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки.
-Например, регулярное выражение `.ar` обозначает: любой символ, за которым следуют буквы `a` и `r`.
+Точка `.` — это простейший пример метасимвола. Метасимвол `.`
+находит любой отдельный символ. Точка не будет находить символы возврата каретки
+(CR) или перевода строки (LF). Например, регулярное выражение `.ar` обозначает
+"любой символ, за которым следуют буквы `a` и `r`".
 
 
 ".ar" => The car parked in the garage.
@@ -141,10 +144,11 @@
 
 ## 2.2 Набор символов.
 
-Набор символов также называется классом символов. Квадратные скобки используются
-для определения набора символов. Дефис используется для указания диапазона символов.
-Порядок следования символов, заданный в квадратных скобках, не важен. Например,
-регулярное выражение `[Tt]he` обозначает заглавную `T` или строчную `t`, за которой следуют буквы `h` и `e`.
+Набор символов, также называется классом символов. Для определения набора
+символов используются квадратные скобки. Дефис используется для указания
+диапазона символов. Порядок следования символов, заданный в квадратных скобках,
+не важен. Например, регулярное выражение `[Tt]he` интерпретируется как
+"заглавная `T` или строчная `t`, за которой следуют буквы `h` и `e`".
 
 
 "[Tt]he" => The car parked in the garage.
@@ -152,8 +156,9 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1)
 
-Точка внутри набора символов, однако, обозначает непосредственно точку, как символ.
-Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует `r`, за которой следует `.` (символ точки).
+Точка внутри набора символов, внезапно, обозначает непосредственно точку как
+символ. Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует
+`r`, за которой следует `.` (символ точки).
 
 
 "ar[.]" => A garage is a good place to park a car.
@@ -163,8 +168,9 @@
 
 ### 2.2.1 Отрицание набора символов
 
-Знак вставки `^` обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов.
-Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме `c`, за которым следуют буквы `a` и `r`.
+Карет `^` обозначает начало строки, но если вы поставите его после открывающей
+квадратной скобки, он инвертирует набор символов. Например, регулярное выражение
+`[^c]ar` обозначает "любой символ, кроме `c`, за которым следуют буквы `a` и `r`".
 
 
 "[^c]ar" => The car parked in the garage.
@@ -174,16 +180,16 @@
 
 ## 2.3 Повторения
 
-Символы `+`, `*` или `?` используются для обозначения того сколько раз появляется какой-либо подшаблон.
-Данные метасимволы могут вести себя по-разному, в зависимости от ситуации.
+Символы `+`, `*` и `?` используются для обозначения того, сколько раз появляется
+символ перед ними. Эти метасимволы ведут себя в разных ситуациях по-разному.
 
 ### 2.3.1 Звёздочка
 
-Символ `*` обозначает ноль или более повторений предыдущего совпадения.
-Регулярное выражение `a*` означает ноль или более повторений предыдущего
-строчного символа `a`. Если же символ появляется после набора или класса символов,
-он находит повторения всего набора символов. Например, регулярное выражение `[a-z]*`
-означает любое количество строчных букв в строке.
+Символ `*` обозначает ноль или более повторений предыдущего символа. Регулярное
+выражение `a*` толкуется как "ноль или более повторений предыдущего строчного
+символа `a`". Если же символ появляется после набора или класса символов, он
+ищет повторения всего набора символов. Например, регулярное выражение `[a-z]*`
+означает "любое количество строчных букв".
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -191,11 +197,12 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/7m8me5/1)
 
-Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.`
-для поиска одной строки с произвольным содержанием `.*`. Символ `*` может использоваться
-с символом пробела `\s`, чтобы находить строки с символами пробела. Например, выражение
-`\s*cat\s*` означает: ноль или более пробелов, за которыми следует слово `cat`,
-за которым следует ноль или более символов пробела.
+Символы можно комбинировать. Например, метасимвол `*` может использоваться с
+метасимволом `.` для поиска строки с произвольным содержанием: `.*`. Символ `*`
+может использоваться с символом пробела `\s`, чтобы искать строки с символами
+пробела. Например, выражение `\s*cat\s*` означает: "ноль или более пробелов, за
+которыми следует слово `cat`, за которым следует ноль или более символов
+пробела".
 
 
 "\s*cat\s*" => The fat cat sat on the concatenation.
@@ -205,9 +212,11 @@
 
 ### 2.3.2 Плюс
 
-Символ `+` соответствует одному или более повторению предыдущего символа. Например,
-регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ,
-следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в предложении.
+Символ `+` соответствует одному или более повторению предыдущего символа.
+Например, регулярное выражение `c.+t` интерпретируется так: "строчная `c`, за
+которой следует по крайней мере один любой символ, следом за которым(и) идёт
+символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в
+строке.
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -218,8 +227,9 @@
 ### 2.3.3 Знак вопроса
 
 В регулярном выражении метасимвол `?` делает предыдущий символ необязательным.
-Этот символ соответствует нулю или одному экземпляру предыдущего символа.
-Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы `h` и `e`.
+Этот символ соответствует нулю или одному вхождению предыдущего символа.
+Например, регулярное выражение `[T]?he` означает: "необязательная заглавная
+буква `T`, за которой следуют символы `h` и `e`".
 
 
 "[T]he" => The car is parked in the garage.
@@ -236,8 +246,8 @@
 ## 2.4 Фигурные скобки
 
 В фигурных скобках, которые также называются квантификаторами, указывается,
-сколько раз символ или группа символов могут повторяться. Например, регулярное выражение
-`[0-9]{2,3}` означает совпадение не менее 2 но не более 3 цифр в диапазоне от 0 до 9.
+сколько раз символ или группа символов могут повторяться. Например, регулярное
+выражение `[0-9]{2,3}` означает: "от 2 до 3 цифр в диапазоне от 0 до 9.
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -245,9 +255,9 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/juM86s/1)
 
-Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9]{2,}` будет означать
-совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение
-`[0-9]{3}` будет означать совпадение точно с 3 цифрами.
+Мы можем опустить второе число (цифру 3), тогда регулярное выражение `[0-9]{2,}`
+будет значить "2 или более цифр". А если мы удалим запятую, регулярное выражение
+`[0-9]{3}` будет искать ровно 3 цифры.
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -263,13 +273,14 @@
 
 ## 2.5 Скобочные группы
 
-Скобочные группы это группы подшаблонов, которые написаны в круглых скобках
-`(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор
-после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после
-скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab)*` соответствует
-нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|`
-внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`,
-`g` или `p`, за которыми следуют буквы `a` и `r`.
+Скобочные группы — это группы подшаблонов, которые написаны в круглых скобках
+`(...)`. Как мы уже говорили ранее, в регулярном выражении, квантификатор после
+символа, ищет повторы символа перед квантификатором. Если мы поставим
+квантификатор после скобочной группы, он будет искать повторы всей группы. К
+примеру, регулярное выражение `(ab)*` соответствует нулю или более повторений
+строки "ab". Мы также можем использовать метасимвол чередования `|` внутри
+скобочной группы. Так, регулярное выражение `(c|g|p)ar` означает: "любая из
+строчных букв `c`, `g` или `p`, за которой следуют буквы `a` и `r`".
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -277,15 +288,18 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/tUxrBG/1)
 
-Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке.
-Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций.
+Обратите внимание, что скобочные группы не только находят, но и захватывают
+символы для использования в языке программирования. Таким языком может быть
+Python, JavaScript и практически любой язык, в котором регулярные выражения
+можно использовать в параметрах функций.
 
-### 2.5.1 Не запоминающие скобочные группы
+### 2.5.1 Незахватывающие скобочные группы
 
-Бывает так, что группу определить нужно, а вот запоминать их содержимое в массиве не требуется.
-Подобный трюк осуществляется при помощи зарезервированной комбинации `?:`
-в круглых скобках `(...)`. Например, регулярное выражение `(?:c|g|p)ar` будет находить такие же шаблоны как и
-`(c|g|p)ar`, однако скобочная группа при этом создана не будет.
+Бывает так, что группу определить нужно, а вот захватывать её содержимое в
+массив не требуется. Подобный трюк осуществляется при помощи специальной
+комбинации `?:` в круглых скобках `(...)`. Так, регулярное выражение
+`(?:c|g|p)ar` будет искать те же шаблоны, что и `(c|g|p)ar`, но группа захвата
+при этом создана не будет.
 
 
 "(?:c|g|p)ar" => The car is parked in the garage.
@@ -293,19 +307,20 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1)
 
-Незапоминающиеся группы могут пригодиться, когда они используются в функциях поиска и замены,
-или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных,
-смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
+Незахватывающие группы могут пригодиться, в ситуациях типа найти-и-заменить, или
+вместе со скобочными группами, чтобы не засорять массив из захваченных данных
+ненужными строками. Смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
 
-## 2.6 Альтернация
+## 2.6 Перечисление
 
-В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования).
-Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что
-чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что
-набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений.
-Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`) и шаблон
-(строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов,
-по аналогии с логической операцией ИЛИ в программировании и алгебре выражений.
+В регулярных выражениях вертикальная черта `|` используется для определения
+перечисления (выбора). Перечисление похоже на оператор ИЛИ между выражениями.
+Может создаться впечатление, что перечисление — это то же, что и набор символов.
+Но набор символов работает на уровне конкретных символов, а перечисление
+работает на уровне выражений. К примеру, регулярное выражение `(T|t)he|car`
+значит: либо "заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`", либо
+"строчная `c`, затем строчная `a`, за которой следует строчная `r`". Во входных
+данных будут искаться оба шаблона, для удобства заключённые в кавычки.
 
 
 "(T|t)he|car" => The car is parked in the garage.
@@ -315,13 +330,15 @@
 
 ## 2.7 Экранирование спецсимволов
 
-Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа.
-Это позволяет формировать шаблоны с поиском зарезервированных символов, таких как `{ } [ ] / \ + * . $ ^ | ?`.
-Для использования спецсимвола в шаблоне необходимо указать символ `\` перед ним.
+Обратный слэш `\` используется в регулярных выражениях для экранирования
+следующего символа. Это позволяет формировать шаблоны с поиском специальных
+символов, таких как `{ } [ ] / \ + * . $ ^ | ?`. Для использования спецсимвола в
+шаблоне необходимо указать символ `\` перед ним.
 
-Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки.
-Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение
-`(f|c|m)at\.?`, что соответствует следующему шаблону: строчный символ `f`, `c` или `m`, за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
+Например: символ `.` является специальным и соответствует любому знаку, кроме
+символа новой строки. Чтобы найти точку во входных данных, воспользуется
+выражением `(f|c|m)at\.?`: "строчный символ `f`, `c` или `m`, за которым следует
+строчные буквы `a` и `t`, с необязательной `.` точкой в конце".
 
 
 "(f|c|m)at\.?" => The fat cat sat on the mat.
@@ -331,19 +348,22 @@
 
 ## 2.8 Якоря
 
-Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли
-соответствующий символ начальным или конечным символом входной строки. Якоря бывают двух типов:
-Первый тип - Каретка `^`, проверяет, является ли соответствующий символ начальным символом в тексте.
-Второй тип - Доллар `$`, проверяет, является ли соответствующий символ последним символом входной строки.
+Якоря в регулярных выражениях используются для проверки, является ли
+соответствующий символ первым или последним символом входной строки. Есть два
+типа якорей: каретка `^` — проверяет, является ли соответствующий символ первым
+символом в тексте, и доллар `$` — проверяет, является ли соответствующий символ
+последним символом входной строки.
 
 ### 2.8.1 Каретка
 
-Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки.
-Если мы применяем следующее регулярное выражение `^a` (если a является начальным символом) для строки `abc`,
-совпадение будет соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на той же строке,
-мы не получим совпадения, поскольку во входящей строке `abc` "b" не является первым символом. Рассмотрим другое
-регулярное выражение: `^(T|t)he`, обозначающее заглавную `T` или строчную `t` как первый символ, за которым следуют
-символы букв `h` и `e`. Cоответственно:
+Символ каретки `^` используется для проверки, является ли соответствующий символ
+первым символом входной строки. Если мы применяем следующее регулярное выражение
+`^a` ('a' является первым символом) для строки `abc`, совпадение будет
+соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на
+той же строке, мы не получим совпадения, поскольку во входящей строке `abc` "b"
+не является первым символом. Рассмотрим другое регулярное выражение: `^(T|t)he`,
+оно значит "заглавная `T` или строчная `t` как первый символ, за которым следуют
+буквы `h` и `e`". Cоответственно:
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -360,9 +380,9 @@
 ### 2.8.2 Доллар
 
 Символ доллара `$` используется для проверки, является ли соответствующий символ
-последним символом входной строки. Например, регулярное выражение `(at\.)$` последовательность из
-строчной `a`, строчной `t`, и точки `.`, ключевой момент в том, что благодаря доллару этот шаблон будет
-находить совпадения только в том случае, если будет наблюдаться в конце строки. Например:
+последним символом входной строки. Например, регулярное выражение `(at\.)$`
+значит: "последовательность из строчной `a`, строчной `t`, точки `.`, находящая
+в конце строки". Пример:
 
 
 "(at\.)" => The fat cat. sat. on the mat.
@@ -378,29 +398,28 @@
 
 ## 3. Наборы сокращений и диапазоны
 
-Регулярные выражения предоставляют сокращения для часто используемых наборов символов,
-которые предлагают удобные сокращения для часто используемых регулярных выражений.
-Наборы сокращенных символов следующие:
+В регулярных выражениях есть сокращения для часто используемых наборов символов:
 
 |Сокращение|Описание|
 |:----:|----|
-|.|Любой символ кроме символа новой строки|
-|\w|Поиск буквенно-цифрового диапазона символов: `[a-zA-Z0-9_]`|
-|\W|Поиск не буквенно-цифрового диапазона символов: `[^\w]`|
-|\d|Поиск цифр: `[0-9]`|
+|.|Любой символ, кроме символа перевода строки|
+|\w|Английская буква либо цифра: `[a-zA-Z0-9_]`|
+|\W|Любой символ, кроме английских букв и цифр: `[^\w]`|
+|\d|Цифра: `[0-9]`|
 |\D|Поиск всего, что не является цифрой: `[^\d]`|
-|\s|Поиск пробелов и символов начала строки: `[\t\n\f\r\p{Z}]`|
-|\S|Поиск всего кроме пробелов и символов начала строки: `[^\s]`|
+|\s|Пробел либо символ начала строки: `[\t\n\f\r\p{Z}]`|
+|\S|Любой символ, кроме пробела и символа начала строки: `[^\s]`|
 
 ## 4. Опережающие и ретроспективные проверки
 
-Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид
-***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив).
-Данные проверки используются когда мы знаем, что шаблон предшествует или сопровождается другим шаблоном.
-Например, мы хотим получить цену в долларах `$` из следующей входной строки
-`$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
-получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют
-следующие виды проверок:
+Опережающие и ретроспективные проверки (lookbehind, lookahead) — это особый вид
+***незахватывающих скобочных групп*** (находящих совпадения, но не добавляющих
+в массив совпадений). Данные проверки используются, когда мы знаем, что шаблон
+предшествует или сопровождается другим шаблоном. Например, мы хотим получить
+цену в долларах `$` из следующей входной строки `$4.44 and $10.88`. Для этого
+используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
+получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара
+`$`. Существуют следующие виды проверок:
 
 |Символ|Описание|
 |:----:|----|
@@ -411,14 +430,17 @@
 
 ### 4.1 Положительное опережающее условие
 
-Положительное опережающее утверждение (assert) означает, что за первой частью выражения должно следовать
-опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)).
-Возвращенное совпадение содержит только текст, который соответствует первой части выражения.
-Для определения положительного опережающего условия используются круглые скобки. В этих скобках используется
-знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства.
-Рассмотрим пример регулярного выражения: `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`,
-следом буквы `h` и `e`. В скобках, мы определяем положительное опережающее условие, которое сообщает движку регулярных выражений
-информацию о том, что после шаблона `The` или `the` будет следовать слово `fat`.
+Положительное опережающее условие требует, чтобы за первой частью выражения
+обязательно следовало выражение из условия. Возвращенное совпадение содержит
+только текст, который соответствует первой части выражения. Для определения
+положительного опережающего условия используются круглые скобки. В этих скобках
+используется знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение
+записывается внутри скобок после знака равенства. Рассмотрим пример регулярного
+выражения: `(T|t)he(?=\sfat)` "заглавная `T` или строчная `t`, следом буквы `h`
+и `e`. Всё это должно быть перед пробелом и словом 'fat'". В скобках мы
+определяем положительное опережающее условие, которое говорит библиотеке
+регулярных выражений о том, что после шаблона `The` или `the` будет следовать
+слово `fat`.
 
 
 "(T|t)he(?=\sfat)" => The fat cat sat on the mat.
@@ -428,11 +450,13 @@
 
 ### 4.2 Отрицательное опережающее условие
 
-Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить
-все совпадения из входной строки, за которыми НЕ следует определенный шаблон. Отрицательное опережающее условие
-определяется таким же образом, как и позитивное, с той лишь разницей, что вместо равенства `=` мы ставим
-восклицательный знак `!` (отрицание) например: `(?!...)`. Рассмотрим выражение `(T|t)he(?!\sfat)`, в котором мы
-находим все `The` или `the` слова из входной строки, за которыми не следует слово `fat`.
+Отрицательное опережающее условие работает по обратному принципу: используется,
+когда нам нужно получить все совпадения из входной строки, за которыми НЕ
+следует определенный шаблон. Отрицательное опережающее условие определяется
+таким же образом, как и положительное, с той лишь разницей, что вместо равенства
+`=` мы ставим восклицательный знак `!` (логическое отрицание): `(?!...)`.
+Пример: `(T|t)he(?!\sfat)` — ищем слова `The` или `the`, за которыми не следует
+пробел и слово `fat`.
 
 
 "(T|t)he(?!\sfat)" => The fat cat sat on the mat.
@@ -442,9 +466,10 @@
 
 ### 4.3 Положительное ретроспективное условие
 
-Положительное ретроспективное условие используется чтобы найти все совпадения, которым предшествует
-определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает,
-найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` или `the`.
+Положительное ретроспективное условие используется чтобы найти все совпадения,
+которым предшествует определенный шаблон. Условие определяется как `(?<=...)`.
+Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает: "найти все слова `fat`
+или `mat` из входной строки, которым предшествует слово `The` или `the`".
 
 
 "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -454,9 +479,10 @@
 
 ### 4.4 Отрицательное ретроспективное условие
 
-Отрицательное ретроспективное условие используется чтобы найти все совпадения, которым НЕ предшествует
-определенный шаблон. Условие определяется как `(?
 "(?<!(T|t)he\s)(cat)" => The cat sat on cat.
@@ -466,22 +492,23 @@
 
 ## 5. Флаги
 
-Флаги, также называемые модификаторами, изменяют вывод регулярного выражения.
-Эти флаги могут быть использованы в любом порядке или комбинации, и являются
-неотъемлемой частью регулярных выражений.
+Флаги, также называемые модификаторами, изменяют принцип работы регулярного
+выражения. Эти флаги могут быть использованы в любом порядке или комбинации, и
+являются неотъемлемой частью регулярных выражений.
 
 |Флаг|Описание|
 |:----:|----|
-|i|Поиск без учета регистра|
-|g|Глобальный поиск: поиск шаблона во всем входном тексте|
-|m|Мультистроковый поиск: Якоря применяются к каждой строке.|
+|i|Поиск без учета регистра.|
+|g|Глобальный поиск: искать все вхождения шаблона в тексте, а не только первое совпадение.|
+|m|Мультистроковый поиск: якоря применяются к строкам, а не ко всему тексту.|
 
 ### 5.1 Поиск без учета регистра
 
-Модификатор `i` используется для поиска без учета регистра. Например, регулярное выражение
-`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`,
-указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во
-всем входном тексте, использован флаг `g`.
+Модификатор `i` используется для поиска без учета регистра. Например, регулярное
+выражение `/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце
+регулярного выражения флаг `i`, указывающий библиотеке регулярных выражений
+игнорировать регистр символов. Дополнительно для поиска шаблона во всем входном
+тексте, использован флаг `g`.
 
 
 "The" => The fat cat sat on the mat.
@@ -497,10 +524,12 @@
 
 ### 5.2 Глобальный поиск
 
-Модификатор `g` используется для выполнения глобального сопоставления (найти все совпадения, а не останавливаться после первого).
-Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`.
-Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом
-(что является поведением по умолчанию).
+Модификатор `g` используется для выполнения глобального сопоставления (найти все
+совпадения, а не останавливаться после первого). К примеру, регулярное выражение
+`/.(at)/g` означает: "любой символ (кроме начала новой строки), следом строчная
+`a` и `t`". Благодаря флагу `g`, такое регулярное выражение найдёт все
+совпадения во входной строке, а не остановится на первом (что является
+поведением по умолчанию).
 
 
 "/.(at)/" => The fat cat sat on the mat.
@@ -517,11 +546,12 @@
 ### 5.3 Мультистроковый поиск
 
 Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее,
-якоря `(^, $)` используются для проверки, является ли шаблон началом или концом входной строки.
-Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например,
-регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой
-символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм
-регулярных выражений будет искать данный шаблон в конце каждой строки в тексте.
+якоря `(^, $)` используются для проверки, является ли шаблон началом или концом
+входных данных. Но если мы хотим, чтобы якоря работали в каждой строке, мы
+используем флаг `m`. Например, регулярное выражение `/at(.)?$/gm` означает:
+"строчная `a`, следом строчная `t` и необязательный любой символ (кроме начала
+новой строки)". Благодаря флагу `m` библиотека регулярных выражений будет искать
+данный шаблон в конце каждой строки в тексте.
 
 
 "/.at(.)?$/" => The fat
@@ -539,30 +569,33 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/E88WE2/1)
 
-## 6. Жадные vs ленивые квантификаторы
-По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет
-искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который
-будет стремиться быть как можно более коротким по времени.
+## 6. Жадная и ленивая квантификация
+По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно
+будет искать самые длинные возможные совпадения. Мы можем использовать `?` для
+ленивого поиска, который будет искать наименьшие возможные совпадения во входных
+данных.
 
 
-"/(.*at)/" => The fat cat sat on the mat. 
+"/(.*at)/" => The fat cat sat on the mat. +
[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/1)
-"/(.*?at)/" => The fat cat sat on the mat. 
+"/(.*?at)/" => The fat cat sat on the mat. +
[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/2) -## Содействие +## Участвуйте в жизни репозитория -* Вы можете открыть пулл реквест с улучшением -* Обсуждать идеи в issues -* Распространять ссылку на репозиторий -* Получить обратную связь через [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) +* Откройте пулл реквест с исправлением +* Обсуждайте идеи в issues +* Распространяйте знания и ссылку на репозиторий +* Приходите с отзывами к [![@ziishaned в Twitter](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=%40ziishaned)](https://twitter.com/ziishaned) ## Лицензия From 70659cf5c5b8196368b173ca6f9b2d2b3cf98d77 Mon Sep 17 00:00:00 2001 From: AHOHNMYC <24810600+AHOHNMYC@users.noreply.github.com> Date: Fri, 21 Oct 2022 07:09:58 +0300 Subject: [PATCH 151/156] [ru] Remove extra space --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 10767210..74b983f2 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1,6 +1,6 @@


- + Учим регулярки

From 92fe3f245930190c71e006afee0f0af9cc58da08 Mon Sep 17 00:00:00 2001 From: AHOHNMYC <24810600+AHOHNMYC@users.noreply.github.com> Date: Sun, 23 Oct 2022 09:20:09 +0300 Subject: [PATCH 152/156] [ru] Fix link to German translation --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 74b983f2..1f4025c0 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -8,7 +8,7 @@ ## Переводы: * [English](../README.md) -* [German](translations/README-de.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) From 22901bc1db0eb357dc5b2bdc5b2476f97b887b74 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Thu, 1 Jun 2023 09:29:16 -0400 Subject: [PATCH 153/156] add FUNDING.yml file --- .github/FUNDING.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..f5160b29 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: [ziishaned] From 6cf0c2b3c7d7f516bc326c88921440b85415b6d6 Mon Sep 17 00:00:00 2001 From: Amirreza A Date: Thu, 6 Jul 2023 13:16:13 +0330 Subject: [PATCH 154/156] fixed translation hyperlinks. --- translations/README-cn.md | 3 ++- translations/README-de.md | 5 +++-- translations/README-es.md | 3 ++- translations/README-fa.md | 3 ++- translations/README-fr.md | 3 ++- translations/README-gr.md | 3 ++- translations/README-he.md | 32 ++++++++++++++++---------------- translations/README-hu.md | 3 ++- translations/README-ja.md | 3 ++- translations/README-ko.md | 3 ++- translations/README-pl.md | 4 ++-- translations/README-pt_BR.md | 3 ++- translations/README-ru.md | 3 ++- translations/README-tr.md | 3 ++- translations/README-vn.md | 3 ++- 15 files changed, 45 insertions(+), 32 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 2a94abe2..f001ae48 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -18,6 +18,7 @@ ## 翻译: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## 什么是正则表达式? diff --git a/translations/README-de.md b/translations/README-de.md index 967b7f33..c48621e3 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -8,7 +8,7 @@ ## Translations: * [English](../README.md) -* German +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -21,7 +21,8 @@ * [Polish](../translations/README-pl.md) * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) -* [עברית](translations/README-he.md) +* [فارسی](../translations/README-fa.md) +* [עברית](../translations/README-he.md) ## Was sind Reguläre Ausdrücke? diff --git a/translations/README-es.md b/translations/README-es.md index 914ffc30..7c3fab7f 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -18,6 +18,7 @@ ## Traducciones: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## Qué es una expresión regular? diff --git a/translations/README-fa.md b/translations/README-fa.md index 74e35deb..362ecec2 100644 --- a/translations/README-fa.md +++ b/translations/README-fa.md @@ -17,6 +17,7 @@ ## برگردان ها: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -30,7 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md)
diff --git a/translations/README-fr.md b/translations/README-fr.md index face914f..4bccd742 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -18,6 +18,7 @@ ## Traductions: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## Qu'est-ce qu'une expression régulière? diff --git a/translations/README-gr.md b/translations/README-gr.md index 2da80b53..31b1ee64 100644 --- a/translations/README-gr.md +++ b/translations/README-gr.md @@ -18,6 +18,7 @@ ## Μεταφράσεις: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## Τι είναι μια Κανονική Έκφραση (Regular Expression); diff --git a/translations/README-he.md b/translations/README-he.md index a66099f7..411dccfe 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -9,22 +9,22 @@ ## תרגומים: -* [English](README.md) -* [German](translations/README-de.md) -* [Español](translations/README-es.md) -* [Français](translations/README-fr.md) -* [Português do Brasil](translations/README-pt_BR.md) -* [中文版](translations/README-cn.md) -* [日本語](translations/README-ja.md) -* [한국어](translations/README-ko.md) -* [Turkish](translations/README-tr.md) -* [Greek](translations/README-gr.md) -* [Magyar](translations/README-hu.md) -* [Polish](translations/README-pl.md) -* [Русский](translations/README-ru.md) -* [Tiếng Việt](translations/README-vn.md) -* [فارسی](translations/README-fa.md) -* [עברית](translations/README-he.md) +* [English](../README.md) +* [German](../translations/README-de.md) +* [Español](../translations/README-es.md) +* [Français](../translations/README-fr.md) +* [Português do Brasil](../translations/README-pt_BR.md) +* [中文版](../translations/README-cn.md) +* [日本語](../translations/README-ja.md) +* [한국어](../translations/README-ko.md) +* [Turkish](../translations/README-tr.md) +* [Greek](../translations/README-gr.md) +* [Magyar](../translations/README-hu.md) +* [Polish](../translations/README-pl.md) +* [Русский](../translations/README-ru.md) +* [Tiếng Việt](../translations/README-vn.md) +* [فارسی](../translations/README-fa.md) +* [עברית](../translations/README-he.md) ## מה זה ביטוי רגולרי? diff --git a/translations/README-hu.md b/translations/README-hu.md index 726abf2d..78c6ef86 100644 --- a/translations/README-hu.md +++ b/translations/README-hu.md @@ -18,6 +18,7 @@ ## Fordítások: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## Mi az a reguláris kifejezés? diff --git a/translations/README-ja.md b/translations/README-ja.md index ef9a2894..31c62402 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -18,6 +18,7 @@ ## 翻訳 * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## 正規表現とは diff --git a/translations/README-ko.md b/translations/README-ko.md index c41feb6a..e34f3d25 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -18,6 +18,7 @@ ## 번역: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## 정규표현식이란 무엇인가? diff --git a/translations/README-pl.md b/translations/README-pl.md index 1569b31a..92519d53 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -18,6 +18,7 @@ ## Tłumaczenia: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,8 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) - +* [עברית](../translations/README-he.md) ## Co to jest wyrażenie regularne? [![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) diff --git a/translations/README-pt_BR.md b/translations/README-pt_BR.md index eda70936..653138f1 100644 --- a/translations/README-pt_BR.md +++ b/translations/README-pt_BR.md @@ -18,6 +18,7 @@ ## Traduções: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## O que é uma Expressão Regular? diff --git a/translations/README-ru.md b/translations/README-ru.md index 8cfe2c3e..3c565f5a 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -17,6 +17,7 @@ ## Translations: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -30,7 +31,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## Что такое Регулярное выражение? diff --git a/translations/README-tr.md b/translations/README-tr.md index 483a7fae..2edf15fb 100644 --- a/translations/README-tr.md +++ b/translations/README-tr.md @@ -18,6 +18,7 @@ ## Çeviriler: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -31,7 +32,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## Düzenli İfade Nedir? diff --git a/translations/README-vn.md b/translations/README-vn.md index f975cd7a..3a5b2908 100644 --- a/translations/README-vn.md +++ b/translations/README-vn.md @@ -19,6 +19,7 @@ ## Translations: * [English](../README.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -32,7 +33,7 @@ * [Русский](../translations/README-ru.md) * [Tiếng Việt](../translations/README-vn.md) * [فارسی](../translations/README-fa.md) -* [עברית](translations/README-he.md) +* [עברית](../translations/README-he.md) ## Biểu thức chính quy là gì? From a6c6e17ed583aceff421ef04be11686d36ad087e Mon Sep 17 00:00:00 2001 From: Daniel Scherf Date: Fri, 23 Feb 2024 14:15:23 +0100 Subject: [PATCH 155/156] Translate German image --- img/regexp-de.png | Bin 0 -> 15072 bytes translations/README-de.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 img/regexp-de.png diff --git a/img/regexp-de.png b/img/regexp-de.png new file mode 100644 index 0000000000000000000000000000000000000000..824e586aee418901030faf0f42f8e99bfe3566d7 GIT binary patch literal 15072 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 MoY~nD1J@h>1 literal 0 HcmV?d00001 diff --git a/translations/README-de.md b/translations/README-de.md index 967b7f33..8c95c06a 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -38,7 +38,7 @@ kann. Wir möchten festlegen, dass der Benutzernamen Buchstaben, Ziffern, Unter- wir die Anzahl der Zeichen limitieren, damit der Name nicht unlesbar wird. Dazu verwenden wir den folgenden regulären Ausdruck:

- Regular expression + Regular expression

Der abgebildete reguläre Ausdruck erlaubt bspw. Die Eingaben `john_doe`, `jo-hn_doe` und `john12_as`. Die Eingabe `Jo` wird nicht akzeptiert, weil sie einen Großbuchstaben enthält und zu kurz ist. From ee0cf94e89c33a454e701cec22c78a6e802454a0 Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Wed, 5 Feb 2025 13:51:04 -0500 Subject: [PATCH 156/156] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 9c1c4b2e..8052154d 100644 --- a/README.md +++ b/README.md @@ -596,8 +596,7 @@ possible. We can use `?` to match in a lazy way, which means the match should be * Open a pull request with improvements * Discuss ideas in issues * Spread the word -* Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) ## License -MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) +MIT © Zeeshan Ahmad