简介
在程序开发中,经常会碰到需要匹配、查找、替换、判断字符串,如果用纯编码方式解决的话,难度较大,而且很浪费时间,通过正则表达式可以解决这些问题。
正则表达式并不只属于某一门程序语言。在众多的编程语言当中,包括JAVA、Perl、PHP、Python、JavaScript和JScript,都无一例外内生地支持正则表达式处理。Scala语言同样支持正则表达式。scala可以直接通过Java操作正则表达式的方式使用正则表达式,但scala实现了自己的方式,它更为灵活。
常用符号及含义
符号 | 含义 |
---|---|
句点符号. | 它是一种通配符,用于匹配一个字符。例如Spa.k,可以匹配Spark、Spaak等任意字母组成的字符串,还可以匹配Spa#k,Spa k等特殊字符组成的字符串。 |
[] | 限定匹配。例如Spa[ark]k只会匹配Spark,Spaak,Spakk这三个字符串,对于其它的不会匹配。 |
\|或匹配。例如Spa(a|r|rr|k)k,则可以匹配Spark,Spaak,Spakk及Sparrk。 |
匹配的是以Spark$为结尾行,例如I love Spark,但它不匹配Spark will be very poupular in the future。
^|匹配行开始符。例如^Spark匹配的是以Spark开始的行,如Spark will be very poupular in the future,不匹配I love Spark。
*|匹配0至多个字符。例如Spar,可以匹配任何Spar开始的字符串,如Spar,Spark,Sparkkkkk。
/|转义符。例如Spark/
的字符串。
( )|分组符,它会将()中匹配的内容保存起来,可以对其进行访问。例如Spa(a|r|rr|k)k可以对()中匹配的内容保存为一个临时变量,在程序中可以直接对其进行访问。
+|匹配一次或多次。例如Spar+,可以匹配任何Spar开始的字符串,如Spark,Sparkkkkk。
?|匹配0次或一次。例如Spark(s)? 可以匹配Spark和Sparks。
{n}|匹配n次,例如Spark{2},可以匹配I love Sparkk中的Sparkk。
{n,}|至少匹配n次。例如Spark{2,}可以匹配I love Sparksss Sparkss中的Sparksss和Sparkss。
{n,m}|至少匹配n次,最多匹配m次。例如Sparks{2,4}可以匹配I love Sparks Sparkssss中的Sparkssss。
限定匹配[]的用法说明
限定匹配符号 | 说明 |
---|---|
[a-z] | 条件限制在小写a to z范围中一个字符 |
[A-Z] | 条件限制在大写A to Z范围中一个字符 |
[a-zA-Z] | 条件限制在小写a to z或大写A to Z范围中一个字符 |
[0-9] | 条件限制在小写0 to 9范围中一个字符 |
[0-9a-z] | 条件限制在小写0 to 9或a to z范围中一个字符 |
[0-9[a-z]] | 条件限制在小写0 to 9或a to z范围中一个字符(交集) |
[^a-z] | 条件限制在非小写a to z范围中一个字符 |
[^A-Z] | 条件限制在非大写A to Z范围中一个字符 |
[^a-zA-Z] | 条件限制在非小写a to z或大写A to Z范围中一个字符 |
[^0-9] | 条件限制在非小写0 to 9范围中一个字符 |
[^0-9a-z] | 条件限制在非小写0 to 9或a to z范围中一个字符 |
特殊字符
符号 | 含义
—|—
\|反斜杠
\t|间隔(‘/u0009’)
\n|换行 (‘/u000A’)
\r|回车 (‘/u000D’)
\d|数字 等价于[0-9]
\D|非数字 等价于[^0-9]
\s|空白符号 [/t/n/x0B/f/r]
\S|非空白符号 [^/t/n/x0B/f/r]
\w|单独字符 [a-zA-Z_0-9]
\W|非单独字符 [^a-zA-Z_0-9]
\f|换页符
\e|Escape
\b|一个单词的边界
\B|一个非单词的边界
\G|前一个匹配的结束
简单实例
匹配邮箱
object RegexMatch {
def main(args: Array[String]): Unit = {
val sparkRegex="^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$".r
for(matchString <- sparkRegex.findAllIn("[email protected]"))
{
println(matchString)
}
}
}
匹配网址
object RegexMatch {
def main(args: Array[String]): Unit = {
val sparkRegex="^[a-zA-Z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\s*)?$".r
for(matchString <- sparkRegex.findAllIn("http://www.xuetuwuyou.com"))
{
println(matchString)
}
}
}
匹配手机号
object RegexMatch {
def main(args: Array[String]): Unit = {
val sparkRegex="(86)*0*13\\d{9}".r
for(matchString <- sparkRegex.findAllIn("13887888888"))
{
println(matchString)
}
}
}
匹配IP
object RegexMatch {
def main(args: Array[String]): Unit = {
val sparkRegex="(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)".r
for(matchString <- sparkRegex.findAllIn("192.168.1.1"))
{
println(matchString)
}
}
}
忠于技术,热爱分享。欢迎关注公众号:java大数据编程,了解更多技术内容。