| 10 | | class Regex(pat: Pattern) { |
| 11 | | def this(regex: String) = this(Pattern.compile(regex)) |
| 12 | | def matches(input: String): Match = new Match(pat.matcher(input), input) |
| 13 | | def =~(input: String): Boolean = matches(input).matches |
| | 10 | class Regex(pat: Pattern) { |
| | 11 | def this(regex: String) = this(Pattern.compile(regex)) |
| | 12 | def matches(input: String): Match = new Match(pat.matcher(input), input) |
| | 13 | def =~(input: String): Boolean = matches(input).matches |
| | 14 | } |
| | 15 | |
| | 16 | class Match(mat: Matcher, input: String) { |
| | 17 | def matches: Boolean = {mat.reset(); mat.find()} |
| | 18 | def toArray: Array[String] = { |
| | 19 | var array = new ArrayBuffer[String](); |
| | 20 | while(mat.find()) array += input.substring(mat.start(), mat.end()) |
| | 21 | array.toArray |
| 16 | | class Match(mat: Matcher, input: String) { |
| 17 | | def matches: Boolean = {mat.reset(); mat.find()} |
| 18 | | def toArray: Array[String] = { |
| 19 | | var array = new ArrayBuffer[String](); |
| 20 | | while(mat.find()) array += input.substring(mat.start(), mat.end()) |
| 21 | | array.toArray |
| 22 | | } |
| 23 | | def each(f: String => Unit): Boolean = { |
| 24 | | var matched = false |
| 25 | | mat.reset() |
| 26 | | while(mat.find()) { |
| 27 | | f(input.substring(mat.start(), mat.end())) |
| 28 | | matched = true |
| 29 | | } |
| 30 | | matched |
| 31 | | } |
| 32 | | } |
| | 34 | object RE { |
| | 35 | def apply(regex: String) = new Regex(regex) |
| | 36 | def apply(regex: String, input: String) = new Regex(regex).matches(input) |
| | 37 | } |
| 34 | | object RE { |
| 35 | | def apply(regex: String) = new Regex(regex) |
| 36 | | def apply(regex: String, input: String) = new Regex(regex).matches(input) |
| 37 | | } |
| 38 | | |
| 39 | | object RegexTest { |
| 40 | | def main(args: Array[String]) { |
| 41 | | println(RE("[A-Za-z]+") =~ "123456789") |
| 42 | | println(RE("[A-Za-z]+") =~ "This is a pen.") |
| 43 | | println(RE("[A-Za-z]+", "This is a pen.").each {str => |
| 44 | | println(str) |
| 45 | | }) |
| 46 | | for(str <- RE("[A-Za-z]+", "This is a pen.")toArray) { |
| 47 | | println(str) |
| 48 | | } |
| | 39 | object RegexTest { |
| | 40 | def main(args: Array[String]) { |
| | 41 | println(RE("[A-Za-z]+") =~ "123456789") |
| | 42 | println(RE("[A-Za-z]+") =~ "This is a pen.") |
| | 43 | println(RE("[A-Za-z]+", "This is a pen.").each {str => |
| | 44 | println(str) |
| | 45 | }) |
| | 46 | for(str <- RE("[A-Za-z]+", "This is a pen.").toArray) { |
| | 47 | println(str) |