深入探索

正则表达式

这是可以在正则表达式中使用的一些元素的列表…

元素 解释说明
^ 一行或一个字符串的开头
$ 一行或一个字符串的结尾
. 除换行符之外的任何字符
* 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
  1. # match chars...
  2. puts( 'abcdefgh'.match( /cdefg/ ) ) # literal chars
  3. #=> cdefg
  4. puts( 'abcdefgh'.match( /cd..g/ ) ) # dot matches any char
  5. #=> cdefg
  6. # list of chars in square brackets...
  7. puts( 'cat'.match( /[fc]at/ )
  8. #=> cat
  9. puts( "batman's father's cat".match( /[fc]at/ ) )
  10. #=> fat
  11. puts( 'bat'.match( /[fc]at/ ) )
  12. #=> nil
  13. # match char in a range...
  14. puts( 'ABC100x3Z'.match( /[A-Z][0-9][A-Z0-9]/ ) )
  15. #=> C10
  16. puts( 'ABC100x3Z'.match( /[a-z][0-9][A-Z0-9]/ ) )
  17. #=> x3Z
  18. # escape 'special' chars with \
  19. puts( 'ask who?/what?'.match( /who\?\/w..t\?/ ) )
  20. #=> who?/what?
  21. puts( 'ABC 100x3Z'.match( /\s\S\d\d\D/ ) )
  22. #=> " 100x" (note the leading space)
  23. # scan for all occurrences of pattern 'abc' with at least 2 and
  24. # no more than 3 occurrences of the letter 'c'
  25. p( 'abcabccabcccabccccabccccccabcccccccc'.scan( /abc{2,3}/ ) )
  26. #=> ["abcc", "abccc", "abccc", "abccc", "abccc"]
  27. # match either of two patterns
  28. puts( 'my cat and my dog'.match( /cat|dog/ ) ) #=> cat
  29. puts( 'my hamster and my dog'.match( /cat|dog/ ) ) #=> dog