众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
而Scala 的正则表达式继承了 Java 的语法规则,Java 则大部分使用了 Perl 语言的规则。
Scala 通过 scala.util.matching 包中的 Regex 类来支持正则表达式。
使用“.r” 方法可使任意字符串变成一个Regex实例
举些一般常用的正则表达式规则:
^
匹配输入字符串开始的位置。
$
匹配输入字符串结尾的位置
.
匹配任意一个字符
[ ]
匹配字符集,匹配括号包含的任一字符一次
[Rr]uby
匹配 "Ruby" 或 "ruby"
[…-…]
匹配括号内指定范围的字符集, - 表示区间内的任意一个字符或数字
[0-9]
匹配任何数字,类似 [0123456789]
[a-z]
匹配任何 ASCII 小写字母
[A-Z]
匹配任何 ASCII 大写字母
[a-zA-Z0-9]
匹配数字,大小写字母
[^]
匹配字符集,匹配括号内不包含的任一字符
[^abc]
匹配"plain"中"p","l","i","n"
[^abcde]
匹配除了 abcde 其他字符
\A
匹配输入字符串开始的位置
\z
字符串结尾(类似$,但不受处理多行选项的影响)
\Z
字符串结尾或行尾(类似$,但不受处理多行选项的影响)
*
表示匹配该符号前面的字符出现0次、1次或多次
abcde*
匹配 "abcd" 加上 0 个1个或多个的 e。
+
表示匹配该符号前面的字符出现1次或多次
abcde+
匹配 "abcde" 或加多个的 e。
?
表示匹配该符号前面的字符出现0次或1次
abcde?
匹配 "abcd" 或"abcde"。
{n}
匹配符号前面的字符出现次数由括号内的数字n定义
abcde{
3}
匹配"abcdeee" 有3个e
{n,m}
匹配符号前面的字符出现n~m次