南强小屋 Design By 杰米

正则表达式

 //"""原生表达
 val regex="""([0-9]+)([a-z]+)""".r
 val numPattern="[0-9]+".r
 val numberPattern="""\s+[0-9]+\s+""".r

说明:.r()方法简介:Scala中将字符串转换为正则表达式

 /** You can follow a string with `.r`, turning it into a `Regex`. E.g.
 *
 * `"""A\w*""".r` is the regular expression for identifiers starting with `A`.
 */
 def r: Regex = r()

模式匹配一

 //findAllIn()方法返回遍历所有匹配项的迭代器
 for(matchString <- numPattern.findAllIn("99345 Scala,22298 Spark"))
  println(matchString)

说明:findAllIn(…)函数简介

/** Return all non-overlapping matches of this `Regex` in the given character 
 * sequence as a [[scala.util.matching.Regex.MatchIterator]],
 * which is a special [[scala.collection.Iterator]] that returns the
 * matched strings but can also be queried for more data about the last match,
 * such as capturing groups and start position.
 * 
 * A `MatchIterator` can also be converted into an iterator
 * that returns objects of type [[scala.util.matching.Regex.Match]],
 * such as is normally returned by `findAllMatchIn`.
 * 
 * Where potential matches overlap, the first possible match is returned,
 * followed by the next match that follows the input consumed by the
 * first match:
 *
 * {{{
 * val hat = "hat[^a]+".r
 * val hathaway = "hathatthattthatttt"
 * val hats = (hat findAllIn hathaway).toList      // List(hath, hattth)
 * val pos = (hat findAllMatchIn hathaway map (_.start)).toList // List(0, 7)
 * }}}
 *
 * To return overlapping matches, it is possible to formulate a regular expression
 * with lookahead (`"(h)(".r
 * val madhats = (madhatter findAllMatchIn hathaway map {
 * case madhatter(x,y) => s"$x$y"
 * }).toList          // List(hath, hatth, hattth, hatttt)
 * }}}
 *
 * Attempting to retrieve match information before performing the first match
 * or after exhausting the iterator results in [[java.lang.IllegalStateException]].
 * See [[scala.util.matching.Regex.MatchIterator]] for details.
 *
 * @param source The text to match against.
 * @return  A [[scala.util.matching.Regex.MatchIterator]] of matched substrings.
 * @example  {{{for (words <- """\w+""".r findAllIn "A simple example.") yield words}}}
 */
 def findAllIn(source: CharSequence) = new Regex.MatchIterator(source, this, groupNames)

Scala中正则表达式以及与模式匹配结合(多种方式)

模式匹配二

 //找到首个匹配项
 println(numberPattern.findFirstIn("99ss java, 222 spark,333 hadoop"))

Scala中正则表达式以及与模式匹配结合(多种方式)

模式匹配三

//数字和字母的组合正则表达式
 val numitemPattern="""([0-9]+) ([a-z]+)""".r
 val numitemPattern(num, item)="99 hadoop"

Scala中正则表达式以及与模式匹配结合(多种方式)

模式匹配四

 //数字和字母的组合正则表达式
 val numitemPattern="""([0-9]+) ([a-z]+)""".r
 val line="93459 spark"
 line match{
  case numitemPattern(num,blog)=> println(num+"\t"+blog)
  case _=>println("hahaha...")
 }

Scala中正则表达式以及与模式匹配结合(多种方式)

val line="93459h spark"
 line match{
  case numitemPattern(num,blog)=> println(num+"\t"+blog)
  case _=>println("hahaha...")
 }

Scala中正则表达式以及与模式匹配结合(多种方式)

本节所有程序源码

package kmust.hjr.learningScala19
/**
 * Created by Administrator on 2015/10/17.
 */
object RegularExpressOps {
 def main(args:Array[String]):Unit={
 val regex="""([0-9]+)([a-z]+)""".r//"""原生表达
 val numPattern="[0-9]+".r
 val numberPattern="""\s+[0-9]+\s+""".r
 //findAllIn()方法返回遍历所有匹配项的迭代器
 for(matchString <- numPattern.findAllIn("99345 Scala,22298 Spark"))
  println(matchString)
 //找到首个匹配项
 println(numberPattern.findFirstIn("99ss java, 222 spark,333 hadoop"))
 //数字和字母的组合正则表达式
 val numitemPattern="""([0-9]+) ([a-z]+)""".r
 val numitemPattern(num, item)="99 hadoop"
 val line="93459h spark"
 line match{
  case numitemPattern(num,blog)=> println(num+"\t"+blog)
  case _=>println("hahaha...")
 }
 }
}

Scala中正则表达式以及与模式匹配结合(多种方式)

总结

以上所述是小编给大家介绍的Scala中正则表达式以及与模式匹配结合(多种方式),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

标签:
scala正则表达式,scala,模式匹配

南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米

评论“Scala中正则表达式以及与模式匹配结合(多种方式)”

暂无Scala中正则表达式以及与模式匹配结合(多种方式)的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。