深入探索
正则表达式
这是可以在正则表达式中使用的一些元素的列表…
元素 | 解释说明 | |
---|---|---|
^ | 一行或一个字符串的开头 | |
$ | 一行或一个字符串的结尾 | |
. | 除换行符之外的任何字符 | |
* | 0 个或多个前一个正则表达式 | |
*? | 0 个或多个前一个正则表达式(非贪婪) | |
+ | 1 个或多个前一个正则表达式 | |
+? | 1 个或多个前一个正则表达式(非贪婪) | |
[] | 范围规范(例如 [a-z] 表示 “a” 到 “z” 范围内的字符) | |
\w | 一个字母数字字符 | |
\W | 一个非字母数字字符 | |
\s | 一个空白字符 | |
\S | 一个非空白字符 | |
\d | 一个数字 | |
\D | 一个非数字字符 | |
\b | 退格(在范围规范中时) | |
\b | 单词边界(不在范围规范中时) | |
\B | 非单词边界 | |
* | 前面的零个或多个重复 | |
+ | 前面的 1 个或多个重复 | |
{m,n} | 前面的至少 m 次且至多 n 次重复 | |
? | 前面的至多 1 次重复 | |
\ | 前一个或下一个表达式可以匹配 | |
() | 一个匹配组 |
以下是一些示例正则表达式…
overview.rb
# match chars...
puts( 'abcdefgh'.match( /cdefg/ ) ) # literal chars
#=> cdefg
puts( 'abcdefgh'.match( /cd..g/ ) ) # dot matches any char
#=> cdefg
# list of chars in square brackets...
puts( 'cat'.match( /[fc]at/ )
#=> cat
puts( "batman's father's cat".match( /[fc]at/ ) )
#=> fat
puts( 'bat'.match( /[fc]at/ ) )
#=> nil
# match char in a range...
puts( 'ABC100x3Z'.match( /[A-Z][0-9][A-Z0-9]/ ) )
#=> C10
puts( 'ABC100x3Z'.match( /[a-z][0-9][A-Z0-9]/ ) )
#=> x3Z
# escape 'special' chars with \
puts( 'ask who?/what?'.match( /who\?\/w..t\?/ ) )
#=> who?/what?
puts( 'ABC 100x3Z'.match( /\s\S\d\d\D/ ) )
#=> " 100x" (note the leading space)
# scan for all occurrences of pattern 'abc' with at least 2 and
# no more than 3 occurrences of the letter 'c'
p( 'abcabccabcccabccccabccccccabcccccccc'.scan( /abc{2,3}/ ) )
#=> ["abcc", "abccc", "abccc", "abccc", "abccc"]
# match either of two patterns
puts( 'my cat and my dog'.match( /cat|dog/ ) ) #=> cat
puts( 'my hamster and my dog'.match( /cat|dog/ ) ) #=> dog