其他分享
首页 > 其他分享> > 正则表达式的匹配

正则表达式的匹配

作者:互联网

正则表达式可以很方便地从符合特定结构的字符串中提取数据。
Scala封装了Java 的正则表达式。以下给出一个示例:

 1 // src/main/scala/progscala2/patternmatching/match-regex.sc 
 2 
 3 val BookExtractorRE = """Book: title=([^,]+),\s+author=(.+)""".r // ➊ 
 4 val MagazineExtractorRE = """Magazine: title=([^,]+),\s+issue=(.+)""".r 
 5 
 6 val catalog = Seq( 
 7   "Book: title=Programming Scala Second Edition, author=Dean Wampler", 
 8   "Magazine: title=The New Yorker, issue=January 2014", 
 9   "Unknown: text=Who put this here??" 
10 ) 
11 
12 for (item <- catalog) { 
13   item match { 
14     case BookExtractorRE(title, author) => // ➋ 
15       println(s"""Book "$title", written by $author""") 
16     case MagazineExtractorRE(title, issue) => 
17       println(s"""Magazine "title", issue $issue""") 
18     case entry => println(s"Unrecognized entry: $entry") 
19 } 
20 }

 

运行的输出为:
Book "Programming Scala Second Edition", written by Dean Wampler
Magazine "The New Yorker", issue January 2014
Unrecognized entry: Unknown: text=Who put this here??

我们用三重双引号来表示正则表达式字符串,否则,就不得不对正则表达式的反斜杠进行转义,例如用 \\s 表示 \s。你还可以通过创建一个 Regex类的实例来定义正则表达式,如new Regex("""\W"""),但这种用法并不常见。
在三个双引号内的正则表达式中使用变量插值是无效的。你依然需要对变量插值进行转义,例如,你应该用 s"""$first\\s+$second""".r,而不是s"""$first\s+$second""".r。而如果你没有使用变量插值,则不必转义。
scala.util.matching.Regex 定义了若干个用于正则表达式其他操作的方法,如查找和替换。

标签:匹配,title,正则表达式,Magazine,Book,entry,issue
来源: https://www.cnblogs.com/linbo3168/p/16544683.html