正則表達式(十七)

簡介

  在程序開發中,經常會碰到需要匹配、查找、替換、判斷字符串,如果用純編碼方式解決的話,難度較大,而且很浪費時間,通過正則表達式可以解決這些問題。

  正則表達式並不只屬於某一門程序語言。在衆多的編程語言當中,包括JAVA、Perl、PHP、Python、JavaScript和JScript,都無一例外內生地支持正則表達式處理。Scala語言同樣支持正則表達式。scala可以直接通過Java操作正則表達式的方式使用正則表達式,但scala實現了自己的方式,它更爲靈活。

常用符號及含義

符號 含義
句點符號. 它是一種通配符,用於匹配一個字符。例如Spa.k,可以匹配Spark、Spaak等任意字母組成的字符串,還可以匹配Spa#k,Spa k等特殊字符組成的字符串。
[] 限定匹配。例如Spa[ark]k只會匹配Spark,Spaak,Spakk這三個字符串,對於其它的不會匹配。
\|或匹配。例如Spa(a|r|rr|k)k,則可以匹配Spark,Spaak,Spakk及Sparrk。

|Spark 匹配的是以Spark$爲結尾行,例如I love Spark,但它不匹配Spark will be very poupular in the future。
^|匹配行開始符。例如^Spark匹配的是以Spark開始的行,如Spark will be very poupular in the future,不匹配I love Spark。
*|匹配0至多個字符。例如Spar,可以匹配任何Spar開始的字符串,如Spar,Spark,Sparkkkkk。
/|轉義符。例如Spark/Spark 的字符串。
( )|分組符,它會將()中匹配的內容保存起來,可以對其進行訪問。例如Spa(a|r|rr|k)k可以對()中匹配的內容保存爲一個臨時變量,在程序中可以直接對其進行訪問。
+|匹配一次或多次。例如Spar+,可以匹配任何Spar開始的字符串,如Spark,Sparkkkkk。
?|匹配0次或一次。例如Spark(s)? 可以匹配Spark和Sparks。
{n}|匹配n次,例如Spark{2},可以匹配I love Sparkk中的Sparkk。
{n,}|至少匹配n次。例如Spark{2,}可以匹配I love Sparksss Sparkss中的Sparksss和Sparkss。
{n,m}|至少匹配n次,最多匹配m次。例如Sparks{2,4}可以匹配I love Sparks Sparkssss中的Sparkssss。

限定匹配[]的用法說明

限定匹配符號 說明
[a-z] 條件限制在小寫a to z範圍中一個字符
[A-Z] 條件限制在大寫A to Z範圍中一個字符
[a-zA-Z] 條件限制在小寫a to z或大寫A to Z範圍中一個字符
[0-9] 條件限制在小寫0 to 9範圍中一個字符
[0-9a-z] 條件限制在小寫0 to 9或a to z範圍中一個字符
[0-9[a-z]] 條件限制在小寫0 to 9或a to z範圍中一個字符(交集)
[^a-z] 條件限制在非小寫a to z範圍中一個字符
[^A-Z] 條件限制在非大寫A to Z範圍中一個字符
[^a-zA-Z] 條件限制在非小寫a to z或大寫A to Z範圍中一個字符
[^0-9] 條件限制在非小寫0 to 9範圍中一個字符
[^0-9a-z] 條件限制在非小寫0 to 9或a to z範圍中一個字符

特殊字符

符號 | 含義
—|—
\|反斜槓
\t|間隔(‘/u0009’)
\n|換行 (‘/u000A’)
\r|回車 (‘/u000D’)
\d|數字 等價於[0-9]
\D|非數字 等價於[^0-9]
\s|空白符號 [/t/n/x0B/f/r]
\S|非空白符號 [^/t/n/x0B/f/r]
\w|單獨字符 [a-zA-Z_0-9]
\W|非單獨字符 [^a-zA-Z_0-9]
\f|換頁符
\e|Escape
\b|一個單詞的邊界
\B|一個非單詞的邊界
\G|前一個匹配的結束

簡單實例

匹配郵箱

object RegexMatch {
  def main(args: Array[String]): Unit = {
    val sparkRegex="^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$".r
    for(matchString <- sparkRegex.findAllIn("[email protected]"))
    {
      println(matchString)
    }
  }
}

匹配網址

object RegexMatch {
  def main(args: Array[String]): Unit = {
    val sparkRegex="^[a-zA-Z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\s*)?$".r
    for(matchString <- sparkRegex.findAllIn("http://www.xuetuwuyou.com"))
    {
      println(matchString)
    }
  }
}

匹配手機號

object RegexMatch {
  def main(args: Array[String]): Unit = {
    val sparkRegex="(86)*0*13\\d{9}".r
    for(matchString <- sparkRegex.findAllIn("13887888888"))
    {
      println(matchString)
    }
  }
}

匹配IP

object RegexMatch {
  def main(args: Array[String]): Unit = {
    val sparkRegex="(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)".r
    for(matchString <- sparkRegex.findAllIn("192.168.1.1"))
    {
      println(matchString)
    }
  }
}

忠於技術,熱愛分享。歡迎關注公衆號:java大數據編程,瞭解更多技術內容。

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章