Latest web development tutorials

Scala wyrażeń regularnych

Scala przezscala.util.matching REGEX typy pakietów klasy do obsługi wyrażeń regularnych.Poniższy przykład demonstruje użycie wyszukiwanie wyrażenia słownegoScala:

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)
   }
}

Realizacja powyższego kodu, wyjście jest:

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

Przykłady zastosowania metody klasy String r (), aby skonstruować regex obiekt.

Następnie użyj findFirstIn drogę do znalezienia pierwszego meczu.

Jeśli potrzebujesz, aby zobaczyć wszystkie mecze mogą być stosowane metody findAllIn.

Można użyć metody mkString (), aby połączyć wyrażenie regularne dopasowuje ciąg, można skorzystać z potoku (|), aby ustawić różne tryby:

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(","))   // 使用逗号 , 连接返回结果
   }
}

Realizacja powyższego kodu, wyjście jest:

$ scalac Test.scala 
$ scala Test
Scala,scala

Jeśli trzeba wymienić dopasowywania tekstu określone słowa kluczowe, można użyć metodyreplaceFirstIn (), aby zastąpić pierwszy mecz, użyj replaceAllIn ()metoda zastępuje wszystkie mecze, przykłady przedstawiają się następująco:

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"))
   }
}

Realizacja powyższego kodu, wyjście jest:

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

Wyrażenia regularne

Scala zasady składni wyrażenie regularne dziedziczone Java, Java użyje większość z regułami języka Perl.

Poniższa tabela daje nam pewne wspólne zasady wyrażenie regularne:

wyrażenie reguła dopasowywania
^ Dopasuj rozpoczyna ciąg wejściowy.
$ Dopasuj końcówkę wejściową pozycji strun.
, Dopasowuje dowolny pojedynczy znak z wyjątkiem "\ r \ n" jest.
[...] zestaw znaków. Dopasowuje dowolny znak włączone. Na przykład "[abc]" pasuje do "zwykłego" w "a".
[^ ...] zestaw znaków odwrotnie. Dopasowuje dowolny znak nie są wliczone. Na przykład "[^ abc]" pasuje do "zwykłego" w "P", "l", "i", "n".
\\ Dopasuj pozycję startową ciąg wejściowy (bez obsługi multi-line)
Z \\ Koniec łańcucha ($ podobne, ale nie wpływa na możliwości leczenia wielu wierszach)
Z \\ Koniec łańcucha lub koniec linii (od leczenia w sprawie możliwości wielokrotnego liniowych)
Re * Powtarzające się zero lub więcej razy
re + Powtarza się raz lub więcej razy
re? Powtarzające się zero lub jeden razy
Re {n} Powtarzana n razy
re {n}
Re {n, m} Powtarzające n do m razy
a | b Meczu lub b
(Re) Mecz ponownie i przechwytywać tekst na auto o nazwie grupy
(: Re?) Re mecz, nie uchwycić pasujący tekst, ani do tej grupy przypisany numer grupy
(?> Re) Greedy Podwyrażenia
W \\ Litery meczu lub cyfr i znaków podkreślenia lub
W \\ Nie znaleziono żadnych litery, cyfry, podkreślenia, chińskie znaki
\\ S Dopasowuje dowolny spacje, co odpowiada [\ t \ n \ r \ F]
\\ S Nie znaleziono żadnych biały znak
\\ D numery Dopasowane, podobne do [0-9]
\\ D Dopasowuje wszystkie znaki nienumeryczne
\\ G Początek bieżącego wyszukiwania
\\ N nowalinia
\\ B Zazwyczaj pozycja granica wyrazu, ale jeśli używasz charakter klasa reprezentuje Backspace
\\ B Lokalizacja nie pasować do początku lub na końcu wyrazu
\\ T Tabs
\\ Q Zacznijcytuję: \ Q (A + B) * 3 \ e dopasowuje tekst "(A + B) * 3 ".
\\ E Konieccytatu: \ Q (a + b) * 3 \ e dopasowuje tekst "(a + b) * 3 ".

Przykłady wyrażeń regularnych

Przykłady opis
, Dopasowuje dowolny pojedynczy znak z wyjątkiem "\ r \ n" jest.
[Rr] Uby Mecz "Ruby" lub "ruby"
rub [wy] Mecz "ruby" lub "Rube"
[AEIOU] Dopasuj małe litery: aeiou
[0-9] Dopasowuje dowolny cyfrę, podobny do [0123456789]
[AZ] Mecze żadnych liter ASCII małe
[AZ] Dopasowuje dowolny wielkie litery ASCII
[A-zA-Z0-9] Dopasowany cyfry, duże i małe litery
[^ Aeiou] Oprócz dopasowania innych postaci aeiou
[^ 0-9] Dopasowuje dowolny znak inny niż liczbach
\\ D Dopasowane numery, na przykład: [0-9]
\\ D Numery dla dopasowania, na przykład: [^ 0-9]
\\ S obowiązuje mecz, podobnie jak: [\ t \ r \ n \ F]
\\ S Dopasowane niż kosmiczne, podobnie jak: [^ \ t \ r \ n \ f]
W \\ litery, cyfry, mecz podkreśla, podobne do: [a-zA-z0-9_]
W \\ Niepasujące liter, cyfr, podkreśleń, podobne do: [^ A-Za-z0-9_]
Ruby? Mecz "sęk" lub "ruby": y jest opcjonalny
rubin * Mecz "sęk" oraz zero lub więcej r.
rubin + Mecz "sęk" plus jeden lub więcej y.
\\ D {3} Dokładnie dopasowanie trzech cyfr.
\\ D {3} Dopasuj trzy lub więcej cyfr.
\\ D {3,5} Dopasuj trzy, cztery lub pięć cyfr.
\\ \\ D + D Nie Grupowanie: + powtarzanie \ d
(D \\ \\ d) + / Grupa: + powtarzanie \ d \ d
([Rr] Uby (,)?) + Mecz "Ruby", "Ruby, Ruby, Ruby", etc.

Należy zauważyć, że powyższa tabela dla każdego znaku wykorzystuje dwie ukośnik. To dlatego, że w języku Java i Scala backslash w łańcuchu jest znakiem ucieczki. Więc jeśli chcesz wstawić. \., Musisz napisać w ciągu. \\. Aby uzyskać odwrotny ukośnik. Patrz następujące przykłady:

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(","))
   }
}

Realizacja powyższego kodu, wyjście jest:

$ scalac Test.scala 
$ scala Test
able1