Ruby中的正则表达式是一种强大的文本处理工具,用于在字符串中查找、替换或提取符合特定模式的文本。正则表达式通常用`//`来定义,并返回一个`RegExp`对象。接下来,我们将深入探讨Ruby正则表达式的主要知识点。
### 一、字符规则
1. **基础字符匹配**:`/a/`会匹配字符`a`。
2. **字符集**:`/[\d]/`匹配任意数字;`/[\w]/`匹配任何字母、数字或下划线;`/[\s]/`匹配任何空白字符,包括空格、制表符和换行。
3. **特殊字符转义**:`\?`匹配特殊字符`?`,其他如`\^`, `\$, `\?`, `\.`等也需要转义才能匹配自身。
4. **字符范围**:`/[ab]c/`匹配`ac`或`bc`;`/[a-z]/`匹配小写字母,`/[a-zA-Z0-9]/`匹配字母和数字。
5. **否定字符集**:`/[^a-zA-Z0-9]/`匹配非字母和数字的字符;`[\D]`、`[\W]`、`[\S]`分别表示非数字、非单词字符和非空白字符。
### 二、数量规则
1. **重复次数**:`/[A-Z](\d){4}/`匹配首字母为大写,后跟四个数字的字符串,如`A1234`。
2. **问号**:`?`代表0或1个字符,如`/Mrs?\.?/`匹配`Mr`, `Mrs`, `Mr.`和`Mrs.`。
3. **星号**:`*`表示0个或多个字符,如`/Hello*/`匹配`Hello`或`HelloJack`。
4. **加号**:`+`表示1个或多个字符,如`/a+c/`匹配`abc`或`abbdrec`。
5. **精确重复**:`/d{3}/`匹配三个数字。
6. **范围重复**:`/d{1,10}/`匹配1到10个数字,`/d{3,}/`匹配至少三个数字。
7. **最少重复**:`/re{m,n}`匹配至少m个,最多n个`re`。
### 三、正则表达式操作
1. **`=~`运算符**:返回第一个匹配的字符串位置,如`"12345678901"=~/1/`输出0,不匹配返回`nil`。
2. **`match`方法**:返回`MatchData`对象,`a=/abc/.match("abc cba adbdc abc")`匹配成功,`b=/aaa/.match("abc cba adbdc abc")`匹配失败,返回`nil`。
3. **分组与子模式**:用圆括号`()`创建子模式,如`/([A-Za-z]+),([A-Za-z]+),Mrs?\./`匹配多个子模式,通过`[0]`获取整体匹配,通过`[1]`, `[2]`等获取子模式匹配的字符串。
4. **全局变量**:`$1`, `$2`等变量存储匹配的子模式,按照从左到右、从外到内的顺序。
### 四、高级操作
1. **贪婪量词和非贪婪量词**:默认情况下,`*`, `+`, `{m,n}`是贪婪的,尽可能多地匹配字符。若在其后加上`?`,如`*?`, `+?`, `{m,n}?`,则变为非贪婪,尽可能少地匹配字符。
正则表达式在Ruby中提供了强大的文本处理能力,允许灵活地进行模式匹配、替换和提取。熟练掌握这些规则,将极大地提升你的文本处理效率。在实际应用中,还需要结合实际情况灵活运用,避免过度复杂化表达式,以保持代码的清晰易读。