最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Scala中正則表達式的應(yīng)用實例

 更新時間:2026年03月13日 10:32:44   作者:代碼于老總  
在Scala中正則表達式是一種強大的工具,用于在字符串中查找、匹配和替換模式,下面這篇文章主要介紹了Scala中正則表達式應(yīng)用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

引言

大家好~今天來聊個通用又實用的技能:正則表達式在 Scala 中的應(yīng)用。不管你是處理日志、校驗手機號,還是提取字符串里的特定內(nèi)容,正則都是繞不開的 “效率神器”。

一、先搞懂:正則到底是個啥?

很多朋友覺得正則 “難學(xué)”,其實核心就一句話:正則是一套獨立于編程語言的 “字符串規(guī)則語言”  —— 不管你用 Scala、Java 還是 Python,只要是寫\d就代表匹配數(shù)字,寫{11}就代表重復(fù) 11 次,規(guī)則是通用的。

它主要用來干兩件事:

  • 查找:從大字符串里揪出符合規(guī)則的子串(比如從一段文字里找手機號)
  • 匹配:驗證整個字符串是否符合規(guī)則(比如檢查輸入的是不是合法手機號)

二、實戰(zhàn):用 Scala 找字符串里的 11 位數(shù)字

直接上代碼(這是我寫的一個 “提取 11 位數(shù)字” 的示例),咱們邊看邊拆:

/*
* 1、處理字符串
* 2、查找:在大字符串里找符合規(guī)則的子串
* 3、匹配:驗證字符串是否滿足規(guī)則
* 劃重點:正則是通用技術(shù),和編程語言無關(guān)!
*/

object reg01 {
  def main(args: Array[String]): Unit = {
    // 1. 定義正則規(guī)則:匹配11位連續(xù)數(shù)字
    val reg = "\d{11}".r  
    
    // 2. 準(zhǔn)備要處理的目標(biāo)字符串
    val target = "I like 我喜歡 數(shù)13347589473!"
    
    // 3. 查找并輸出結(jié)果
    println("找到的11位數(shù)字是:")
    reg.findAllIn(target).foreach(println)
  }
}

代碼拆解:3 步搞定正則匹配

1. 定義正則規(guī)則:val reg = "\d{11}".r

這里有兩個關(guān)鍵點:

  • \d{11}:這是正則語法——\d代表 “一個數(shù)字”(Scala 里要寫兩個反斜杠\做轉(zhuǎn)義),{11}代表 “連續(xù)出現(xiàn) 11 次”,合起來就是 “匹配 11 位連續(xù)數(shù)字”;
  • .r:這是 Scala 的 “小魔法”—— 把普通字符串轉(zhuǎn)成Regex對象,只有轉(zhuǎn)成這個對象,才能調(diào)用正則的專屬方法。

2. 準(zhǔn)備目標(biāo)字符串:val target = "I like 我喜歡 數(shù)13347589473!"

就是咱們要處理的原始內(nèi)容,里面混了英文、中文和數(shù)字,我們要把 11 位的數(shù)字 “揪” 出來。

3. 執(zhí)行查找:reg.findAllIn(target).foreach(println)

  • findAllIn(target)Regex對象的核心方法,作用是把目標(biāo)字符串里所有符合規(guī)則的子串都找出來,返回一個可迭代的集合;
  • foreach(println):遍歷集合,把找到的結(jié)果打印出來。

運行結(jié)果

執(zhí)行代碼后,控制臺會直接輸出:

找到的11位數(shù)字是:
13347589473

三、進階:正則在 Scala 里的常用玩法

光 “查找” 還不夠,正則還有很多實用操作,這里補充 3 個高頻場景:

1. 只找第一個匹配的內(nèi)容

findFirstIn方法,適合只需要 “第一個結(jié)果” 的場景:

// 找第一個11位數(shù)字
val firstNum = reg.findFirstIn(target)
firstNum.foreach(res => println(s"第一個匹配結(jié)果:$res"))

輸出:第一個匹配結(jié)果:13347589473

2. 驗證整個字符串是否符合規(guī)則

matches方法,比如驗證 “輸入的是不是純 11 位數(shù)字”:

val phone1 = "13347589473"  // 合法
val phone2 = "13347589473abc"  // 不合法
println(phone1.matches("\d{11}"))  // 輸出:true
println(phone2.matches("\d{11}"))  // 輸出:false

3. 替換匹配的內(nèi)容

replaceAllIn方法,把找到的內(nèi)容替換成其他字符:

// 把11位數(shù)字替換成****脫敏
val desensitized = reg.replaceAllIn(target, "****")
println(desensitized)  // 輸出:I like 我喜歡 數(shù)****!

四、最后總結(jié):正則的 “通用 + 高效”

  1. 規(guī)則通用:正則語法是跨語言的,學(xué)會\d、{n}、\w這些基礎(chǔ)語法,換任何語言都能用;
  2. Scala 調(diào)用流程固定:定義規(guī)則(字符串 +.r)→ 調(diào)用方法(findAllIn/matches 等)→ 處理結(jié)果;
  3. 場景廣泛:日志解析、表單校驗、數(shù)據(jù)清洗…… 只要涉及字符串處理,正則都是 “偷懶神器”。

到此這篇關(guān)于Scala中正則表達式的文章就介紹到這了,更多相關(guān)Scala正則表達式應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

闵行区| 荣昌县| 礼泉县| 高陵县| 博白县| 商南县| 西青区| 澜沧| 永丰县| 白玉县| 梓潼县| 遵义县| 桂阳县| 丹棱县| 定边县| 斗六市| 乡宁县| 子长县| 乌恰县| 板桥市| 瑞丽市| 嘉鱼县| 崇礼县| 昆明市| 通辽市| 泸水县| 方城县| 淳安县| 宝鸡市| 呼伦贝尔市| 汝城县| 怀柔区| 周宁县| 楚雄市| 岱山县| 兰坪| 丰顺县| 永丰县| 盐源县| 静海县| 梅河口市|