Scala的正则表达式regex操作



9.   misc

9.1.     json

Scala-json

9.2.     Configgy

http://www.lag.net/configgy/

简单配置及logging:

----------------------------

log {

filename = "/var/log/pingd.log"

roll = "daily"

level = "debug"

}

hostname = "pingd.example.com"

port = 3000

----------------------------

val conf = net.lag.configgy.Configgy.configure("/etc/pingd.conf").config

val hostname = conf.getString("hostname", "localhost")

val port = conf.getInt("port", 3000)

9.3.     正则表达式regex

例子1:完全匹配

//将字符串转为scala.util.matching.Regex

val pattern = "^[a-z0-9._%\\-+]+@(?:[a-z0-9\\-]+\\.)+[a-z]{2,4}$"

val emailRegex = pattern.r // 或者 new
scala.util.matching.Regex(pattern)

//emailRegex.pattern=>java.util.regex.Pattern 使用java的Pattern

emailRegex.pattern.matcher("[email protected]").matches //
true

例子2:查找匹配部分

val p = "[0-9]+".r

p.findAllIn("2 ad 12ab
ab21 23").toList // List(2, 12, 21, 23)

p.findFirstMatchIn("abc123xyz").get //
scala.util.matching.Regex.Match = 123

更多例子如下:

定义:

val r1 = "(\\d+) lines".r  // syntactic sugar val r2 = """(\d+) lines""".r  // using triple-quotes to preserve backslashes
或者
import scala.util.matching.Regex val r3 = new Regex("(\\d+) lines")  // standard val r4 = new Regex("""(\d+) lines""", "lines") // with named groups

search和replace(java.lang.String的方法):

"99 lines" matches "(\\d+) lines" // true
"99 Lines" matches "(\\d+) lines" // false
"99 lines" replace ("99", "98") // "98 lines"
"99 lines lines" replaceAll ("l", "L") // 99 Lines Lines

search(regex的方法):

"\\d+".r findFirstIn "99 lines" // Some(99)
"\\w+".r findAllIn "99 lines" // iterator(长度为2)
"\\s+".r findPrefixOf "99 lines" // None
"\\s+".r findPrefixOf "  99 lines" // Some(  )
val r4 = new Regex("""(\d+) lines""", "g1") // with named groups
r4 findFirstMatchIn "99 lines-a" // Some(99 lines)
r4 findPrefixMatchOf "99 lines-a" // Some(99 lines)
val b = (r4 findFirstMatchIn "99 lines").get.group("g1") // "99"

match(regex的方法):

val r1 = "(\\d+) lines".r
val r4 = new Regex("""(\d+) lines""", "g1")
val Some(b) = r4 findPrefixOf "99 lines" // "99 lines" for {   line <- """|99 lines-a              |99 lines              |pass              |98 lines-c""".stripMargin.lines } line match {   case r1(n) => println("Has " + n + " Lines.") // "Has 99 Lines."
  case _ => }
 
for (matched <- "(\\w+)".r findAllIn "99 lines" matchData)
  println("Matched from " + matched.start + " to " + matched.end)

输出:

Matched from 0 to 2

Matched from 3 to 8

replace(regex的方法):

val r2 = """(\d+) lines""".r  // using triple-quotes to preserve backslashes

r2 replaceFirstIn ("99 lines-a", "aaa") // "aaa-a"

r2 replaceAllIn ("99 lines-a, 98 lines-b", "bbb") // "bbb-a, bbb-b"

其他:使用正则表达式定义变量

val regex = "(\\d+)/(\\d+)/(\\d+)".r

val regex(year, month, day) = "2010/1/13"

// year: String = 2010

// month: String = 1

// day: String = 13

9.4.     GUI

9.4.1.  java方式

import javax.swing.JFrame 

var jf = new JFrame("Hello!") 
jf.setSize(800, 600) 
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 
jf.setVisible(true)

9.4.2.  scala方式

import swing._, swing.Swing._

object Swing1 extends SimpleGUIApplication { //
scala2.7

def top = new MainFrame { // 必须实现top方法

title = "窗口1"

preferredSize = (400, 300)

val label = new Label("hello
world cn中文")

contents = new BorderPanel {

layout(label)
= BorderPanel.Position.Center

}

}

}

时间: 2024-11-10 23:31:38

Scala的正则表达式regex操作的相关文章

Scala的文件读写操作与正则表达式

目录 在本篇博客中你将会学习并了解常用的文件处理任务,例如读取文件的一行文本,本博客的要点包含: Source.fromFile(...).getLines.toArray 输出文件所有行 Source.fromFile(...).mkString 以字符串形式输出文件内容 将字符串转换为数字,可以使用toInt或toDouble方法 使用java的PrintWriter写入文本文件 "正则".r是一个Regex对象 若你的正则表达式包含反斜杠或者引号,请用""&q

scala当中的文件操作和网络请求

1.读取文件当中每一行的数据 def main(args: Array[String]): Unit = { //注意文件的编码格式,如果编码格式不对,那么读取报错 val file: BufferedSource = Source.fromFile("F:\\files\\file.txt","GBK"); val lines: Iterator[String] = file.getLines() for(line <- lines){ println(li

4.C#学习之正则表达式&amp;&amp;Regex

正则表达式(Regular expressions)是一套语法匹配规则,各种语言,如Perl, .Net和Java都有其 对应的共享的正则表达式类库.在.Net中,这个类库叫做Regex. 以下是Regex下的几个静态方法: Escape: 对字符串中的regex中的转义符进行转义:       IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值:       Match: 返回Match的实例:       Matches: 返回一系列的Match的方法:       Repla

C#控制台基础 正则表达式,regex,webclient下载博客园网页中的一张图片

1 网页图 这网页就一张图片,新手入门,找个简单一些的. 2 代码 1 正则表达式,regex,webclient下载博客园网页中的一张图片 2 3 4 using System; 5 using System.Collections.Generic; 6 using System.IO; 7 using System.Linq; 8 using System.Net; 9 using System.Text; 10 using System.Text.RegularExpressions; 1

(四)boost库之正则表达式regex

(四)boost库之正则表达式regex 正则表达式可以为我们带来极大的方便,有了它,再也不用为此烦恼 头文件: #include <boost/regex.hpp> 1.完全匹配 std::string str("abcd"); boost::regex reg( "a\\w*d" ); if (regex_match(str, reg)) { std::cout << str << " is match"

好程序员大数据学习路线分享Scala系列之集合操作函数

好程序员大数据学习路线继续为大家分享Scala系列之集合操作函数4.6 集合的重要函数4.6.1sum/max/min/count在序列中查找最大或最小值是一个极常见的需求,如下:val numbers = Seq(11, 2, 5, 1, 6, 3, 9) numbers.max //11 numbers.min //1 更高级的例子,其中包含一个书的序列case class Book(title: String, pages: Int) val books = Seq( Book("Futu

黑马程序员——正则表达式 Regex

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"): 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分. 正则表达式的特点是: 1. 灵活性.逻辑性和功能性非常的强: 2. 可以迅速地用极简单的方式

C++正则表达式 &lt;regex&gt;

一 简介 概括而言,使用正则表达式处理字符串的流程包括:用正则表达式定义要匹配的字符串的规则,然后对目标字符串进行匹配,最后对匹配到的结果进行操作.C++ 的 regex 库提供了用于表示正则表达式和匹配结果的基本类型,以及使用这些基本类型作为参数或返回结果(通过参数来返回,不是函数的返回值)的搜寻.匹配.替换等函数. 二 基本类型 2.1 basic_regex 及其实例化类型 regex.wregex 模板类型 basic_regex 用于表示正则表达式对象,<regex> 库提供了它的两

Scala编程--基本类型和操作

如果你熟悉Java,你会很开心地发现Java基本类型和操作符在Scala里有同样的意思.然而即使你是一位资深Java开发者,这里也仍然有一些有趣的差别使得本章值得一读.因为本章提到的一些Scala的方面实质上与Java相同,我们插入了一些注释,Java开发者可以安全跳过,以加快你的进程.本章里,你会获得Scala基本类型的概观,包括String和值类型Int,Long,Short,Byte,Float,Double,Char还有Boolean.你会学到可以在这些类型上执行的操作,包括Scala表