> 文章列表 > Ruby正则表达式

Ruby正则表达式

Ruby正则表达式

Ruby正则表达式 | 菜鸟教程
正则在线工具
正则表达式库

正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式基本语法

两个特殊的符号’^‘和’$'。他们的作用是分别指出一个字符串的开始和结束。

模式 描述
^ 匹配行的开头。
$ 匹配行的结尾。
  • ^in”:表示所有以"in"开始的字符串
    Ruby正则表达式
  • ion$”:表示所以以"ion"结尾的字符串
    Ruby正则表达式
  • ^tion$”:表示开始和结尾都是"tion"的字符串——此时只有"tion"自己了;
    Ruby正则表达式
  • tion”:表示任何包含"tion"的字符串。
    Ruby正则表达式
    其它还有’*‘,’+‘和’?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“零次或多次”,“一次或多次”还有“零次或一次”。
模式 描述
re* 匹配前面的子表达式零次或多次
re+ 匹配前面的子表达式一次或多次
re? 匹配前面的子表达式零次或一次
  • er*”:表示一个字符串有一个e后面跟着零个或若干个r。(“e”, “er”, “errr”,……);Ruby正则表达式
  • er+”:表示一个字符串有一个e后面跟着至少一个r或者更多(“er”, “err”, “errr”,……);
    Ruby正则表达式
  • er?”:表示一个字符串有一个e后面跟着零个或者一个r(“e”, “er”);
    Ruby正则表达式
  • e?r+$”:表示在字符串的末尾有零个或一个e跟着一个或几个r。
    Ruby正则表达式
    也可以使用范围,用大括号括起,用以表示重复次数的范围。
    ab{2}”:表示一个字符串有一个a跟着2个b(“abb”);
    ab{2,}”:表示一个字符串有一个a跟着至少2个b;
    ab{3,5}”:表示一个字符串有一个a跟着3到5个b。

!注意:必须指定范围的下限(如:“{0,2}“而不是”{,2}”)
‘*’,'+‘和’?'相当于"{0,}“,”{1,}“和”{0,1}"

模式 描述
. 匹配除了换行符以外的任意单字符。使用 m 选项时,它也可以匹配换行符。
/./m 在多行模式下,也能匹配换行符
a| b 匹配 a 或 b。
(re) 对正则表达式进行分组,并记住匹配文本。
  • tion|sion”:表示一个字符串里有"tion"或者"sion";Ruby正则表达式
  • (at|s)ion”:表示"ation"或"sion;Ruby正则表达式
  • (a|o)*m”:表示一串"a"“o"混合的字符串后面跟零个或若干个"m”;
    Ruby正则表达式
  • ^.{10}$”:表示有任意十个字符的字符串(长度为10个字符);
    Ruby正则表达式
模式 描述
[…] 匹配在方括号中的任意单字符。
[^…] 匹配不在方括号中的任意单字符。
/[Rr]uby/ 匹配 “Ruby” 或 “ruby”
/rub[ye]/ 匹配 “ruby” 或 “rube”
/[aeiou]/ 匹配任何一个小写元音字母
/[0-9]/ 匹配任何一个数字,与 /[0123456789]/ 相同
/\\d/ 匹配一个数字,等同于 /[0-9]/
/\\D/ 匹配一个非数字,等同于 /[^0-9]/
/[a-z]/ 匹配任何一个小写 ASCII 字母
/[A-Z]/ 匹配任何一个大写 ASCII 字母
/[a-zA-Z0-9]/ 匹配任何一个括号内的字符
/\\w/ 匹配一个单词字符,等同于 /[A-Za-z0-9_]/
/\\W/ 匹配一个非单词字符,等同于 /[^A-Za-z0-9_]/

!注意:可以在方括号里用’^‘表示不希望出现的字符,’^‘应在方括号里的第一位。
为了逐字表达,你必须在"^.$()|*+?{"这些字符前加上转义字符’'。
在方括号中,不需要转义字符

符号的组合运用

?=用法

exp1(?=exp2):查找exp1后面是exp2的exp1。
Ruby正则表达式

?<=用法

(?<=exp2)exp1:查找exp1前面是exp2的exp1。
Ruby正则表达式

?!用法

exp1(?!exp2):查找exp1后面不是exp2的exp1。
Ruby正则表达式

?<!用法

(?<!exp2)exp1:查找exp1前面不是exp2的exp1。
Ruby正则表达式