虽然现在各种高级语言基本都支持了正则表达式,但是貌似Ruby却表现的强烈而又灵活。
正则表达式是一种字符串匹配的模式。可以用来一个串中是否含有一个子串;替换匹配的子串;或者取出匹配的子串等等。。。方便的文本操作!
在Ruby中,创建正则表达式的方式通常是/pattern/或%r{pattern}.
我们可以用Regexp类来new一个正则表达式。new的优点是可以通过字符串来生成正则表达式。这有助于通过配置文件来构造产生表达式。函数原型:
Regexp.new(pattern [,options ])
pattern是模式字符串,options是可选的模式选项,是下面3个常量的组合。
1. EXTENDED :忽略空格和换行符
2 . IGNORECASE :忽略大小写
3 . MULTILINE :把换行符当成普通字符对待。
琐碎的东西:
特殊符号--
( )
标记一个子表达式的开始和结束位置。
子表达式可以获取供以后使匹配这些字符,请使用
\(
和
\)
。
[]
范围描述符
(
比如
,[a - z]
表示在
a
到
z
范围内的一个字母
)
,
要匹配
使用
\[
。
{}
标记限定符表达式。要匹配
{
,请使用
\{
。
\
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八义符。
例如, 'n' 匹配字符 'n' 。 '\n' 匹配换行符。序列 '\\' 匹配 "\" ,而 '\( 配 "(" 。
例如, 'n' 匹配字符 'n' 。 '\n' 匹配换行符。序列 '\\' 匹配 "\" ,而 '\( 配 "(" 。
|
指明两项之间的一个选择。要匹配
|
,请使用
\|
。
.
匹配除换行符
\n
之外的任何单字符。要匹配
.
,请使用
\.
非打印字符:
\f
匹配一个换页符。等价于 \x0c。
\n 匹配一个换行符。等价于 \x0a。
\r 匹配一个回车符。等价于 \x0d。
\s 匹配任何空白字符,包括空格、制表符、
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\
\t 匹配一个制表符。等价于 \x09。
\w 匹配包括下划线的任何单词字符。等价于 [0-9A-Za-z]
\W 匹配任何非单词字符。等价于 '[^A-Za-z0
\d 匹配一个数字字符。等价于 [0-9]。 [0-9]
\D 匹配一个非数字字符。等价于 [^0-9]。
\b 退格符 (0x08) (仅在范围描述符内部时)
\n 匹配一个换行符。等价于 \x0a。
\r 匹配一个回车符。等价于 \x0d。
\s 匹配任何空白字符,包括空格、制表符、
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\
\t 匹配一个制表符。等价于 \x09。
\w 匹配包括下划线的任何单词字符。等价于 [0-9A-Za-z]
\W 匹配任何非单词字符。等价于 '[^A-Za-z0
\d 匹配一个数字字符。等价于 [0-9]。 [0-9]
\D 匹配一个非数字字符。等价于 [^0-9]。
\b 退格符 (0x08) (仅在范围描述符内部时)
限定符:
指定正则表达式给定组件出现的次数。
* (最常见,通配符) 前面元素出现 0 或多次。* 等价于{0,}。
例如,zo* 能匹配 "z" 以及 "zoo"。
要匹配 * 字符,请使用 \*。
+ 前面元素出现 1 或多次。+ 等价于 {1,}。
+ 前面元素出现 1 或多次。+ 等价于 {1,}。
例如,'zo+' 能匹配 "zo" 以及 "zoo", 但不能匹配 "z"。
要匹配 + 字符,请使用 \+。
? 前面元素最多出现 1 次;相当于 {0,1}。例如,
? 前面元素最多出现 1 次;相当于 {0,1}。例如,
”do(es)?” 可以匹配 “do” 或 “does” 中的"do" 。要匹配 ? 字符,请使用 \?。
{n} n 是一个非负整数。匹配确定的 n 次。 例如,'o{2}' 不能匹配 "Bob" 中的 'o',
{n} n 是一个非负整数。匹配确定的 n 次。 例如,'o{2}' 不能匹配 "Bob" 中的 'o',
但是能匹配 "food" 中的两o。
{n,} n 是一个非负整数。至少匹配 n 次。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。
{n,m} m 和 n 均为非负整数,其中 n <= m。前面元素最少出现 n 次,最多现 m 次。
{n,} n 是一个非负整数。至少匹配 n 次。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。
{n,m} m 和 n 均为非负整数,其中 n <= m。前面元素最少出现 n 次,最多现 m 次。
'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格
例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。
例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。
定位符:
用来描述字符串或单词的边界,不能对定位符使用限定符。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,
此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
$ 匹配输入字符串的结尾位置。如果设置了
RegExp 对象的 Multiline 属性,
则 $也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never"
中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never"
中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
优先级:
转义符 --> 圆括号,方括号 ---> 限定符 --->定位符 -->或操作
常用操作符:
1. =~ 检验是否匹配,若匹配则返回匹配处的索引
!~ 检验不匹配,返回true或false(nil)
2. ~匹配$_并返回匹配处的索引。
3. match :返回匹配对象