Latest web development tutorials

Scalaの正規表現

正規表現クラスのパッケージタイプをscala.util.matchingことによりScalaは正規表現をサポートします。 次の例では、正規表現の検索ワードスカラの使用方法を示しています

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = "Scala".r
      val str = "Scala is Scalable and cool"
      
      println(pattern findFirstIn str)
   }
}

上記のコードの実装、出力は次のようになります。

$ scalac Test.scala 
$ scala Test
Some(Scala)

StringクラスのR()メソッドの使用例は、正規表現オブジェクトを構築します。

その後、最初の一致を見つけるために、findFirstInの方法を使用します。

あなたが見る必要がある場合は、すべての一致がfindAllIn方法を使用することができます。

(|)あなたは、正規表現文字列と一致し、あなたがパイプを使用することができます接続するためにmkString()メソッドを使用することができ、異なるモードを設定することを:

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("(S|s)cala")  // 首字母可以是大写 S 或小写 s
      val str = "Scala is scalable and cool"
      
      println((pattern findAllIn str).mkString(","))   // 使用逗号 , 连接返回结果
   }
}

上記のコードの実装、出力は次のようになります。

$ scalac Test.scala 
$ scala Test
Scala,scala

テキストマッチング指定されたキーワードを交換する必要がある場合は、最初の一致を置き換えるためにreplaceFirstIn()メソッドを使用することができ、replaceAllIn()メソッドを使用しているすべての一致を置き換え、次のように、例を示します。

object Test {
   def main(args: Array[String]) {
      val pattern = "(S|s)cala".r
      val str = "Scala is scalable and cool"
      
      println(pattern replaceFirstIn(str, "Java"))
   }
}

上記のコードの実装、出力は次のようになります。

$ scalac Test.scala 
$ scala Test
Java is scalable and cool

正規表現

Scalaの正規表現の構文規則は、Javaは、JavaはPerl言語のルールのほとんどを使用します継承しました。

次の表は、私たちにいくつかの一般的な正規表現の規則を与えます:

表現 一致規則
^ 入力文字列が始まると一致。
$ 文字列の位置の入力端と一致しています。
以外の任意の1文字に一致し、 "\ rをする\ n"です。
[...] 文字セット。 任意の文字が含まれる一致します。 たとえば、「[abc]は」「A」の「プレーン」と一致します。
[^ ...] リバース文字セット。 含まれていない任意の文字に一致します。 たとえば、「[^ abc]は「「私」、「n」は、「L」「P」の「プレーン」と一致します。
\\ 入力文字列の開始位置(なしマルチラインサポート)と一致
\\ Z 文字列の末尾($似てではなく、複数行のための治療法の選択肢に影響を与えます)
\\ Z (複数ラインオプションの処理からの)文字列または行の終わりの終わり
*再 繰り返し0回以上
+再 繰り返し一回以上
再? 繰り返しゼロまたは1回
{n}が再 反復n回
{、n}が再
再{N、M} m回の繰り返しnは
| B 一致またはb
(再) マッチの再、および自動という名前のグループにテキストをキャプチャ
(:?再) マッチ再、一致するテキストをキャプチャしていない、またこのグループに割り当てられたグループ番号に
(?>再) 貪欲な部分式
\\ W マッチ文字や数字、または下線文字や
\\ W 任意の文字、数字、アンダースコア、中国語の文字と一致しません
\\ S 同等のマッチ任意の空白、[\トン\ nは\ rを\ f]の
\\ S 任意の空白文字と一致しません
\\ D [0-9]と同様のマッチング数、
\\ D 任意の数字以外の文字に一致します
\\ G 現在の検索の開始
\\ N 改行
\\ B 通常の単語境界位置していますが、文字クラスを使用する場合は、バックスペースを表し、
\\ B 場所単語の先頭または末尾と一致しません
\\ T タブ
\\ Q 引用開始:\ Qは、(A + B)* 3 \ Eは、テキスト「(A + B)* 3と一致します」。
E \\ 終了引用符:\ Q(A + B) * 3 \ Eは、テキストに一致する」(A + B)* 3 」。

正規表現の例

説明
以外の任意の1文字に一致し、 "\ rをする\ n"です。
【Rrは] uby マッチ「ルビー」または「ルビー」
こする[がた] マッチ「ルビー」または「ルーブ」
[AEIOU] AEIOU:小文字を一致させます
[0-9] [0123456789]に似た任意の数字と一致します
[AZ] 任意のASCII小文字の文字に一致します
[AZ] 任意のASCIIの大文字に一致します
[A-ZA-Z0-9] マッチング数字、大文字と小文字
[^ AEIOU] 一致する他の文字に加えてAEIOU
[^ 0-9] 数字以外の任意の文字に一致します
\\ D このように、数字をマッチング:[0-9]
\\ D このような非マッチング番号、:[^ 0-9]
\\ S 似マッチスペース、:[\トン\ rを\ n個の\のF]
\\ S [^ \トン\ rを\ n個の\ f]は:と同様の非空間をマッチング
\\ W 似たマッチ文字、数字、アンダースコア、:[A-ZA-Z0-9_]
\\ W [^ A-ZA-Z0-9_]:に似た非マッチング文字、数字、アンダースコア、
ルビー? マッチ「こする」または「ルビー」:yは任意です
ルビー* マッチ "こする"プラスyはゼロ以上。
ルビー+ マッチ "こする"プラスyは1以上です。
\\ D {3} 正確に3つの数字に一致します。
\\ D {3、} 3桁以上に一致します。
\\ D {3,5} 3つ、4つまたは5つの数字と一致しています。
\\ D \\ D + グループ化いいえ:+繰り返し\ dは
(\\ D \\ d)の+ / グループ:\ D \ Dに繰り返し+
([Rrを】uby()?)+ マッチ「ルビー」、「ルビー、ルビー、ルビー」など

各文字については、上記の表は、2つのバックスラッシュを使用することに注意してください。 JavaとScalaで文字列内のバックスラッシュはエスケープ文字であるためです。 ですから、出力したい場合は。\。、あなたは文字列で記述する必要があります。\\。バックスラッシュを取得するには。 次の例を参照してください:

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("abl[ae]\\d+")
      val str = "ablaw is able1 and cool"
      
      println((pattern findAllIn str).mkString(","))
   }
}

上記のコードの実装、出力は次のようになります。

$ scalac Test.scala 
$ scala Test
able1