簡體   English   中英

Scala REGEX匹配MAC地址

[英]Scala REGEX match for MAC address

晚上好,Stackoverflow,

我被困在無法讓Scala regex比賽發揮出色的地方,這是我的代碼

private def handle_read(packet: TFTPReadRequestPacket, tftp_io: TFTP): Unit = {

    val MAC_REGEX = "([0-9A-F]{2}[:-]){5}([0-9A-F]{2})".r
    packet.getFilename match {
        case MAC_REGEX(a) => println(s"Client is coming from $a")
    }

}

當正則表達式為([0-9A-F]{2}[:-]) ,我請求文件70-很好,並吐出客戶端“來自70”,但是當它已滿時正則表達式,我要求70-CD-60-74-24-9C它會引發類似這樣的異常

[ERROR] [04/28/2015 21:25:27.818] [polydeploy-baremetal-akka.actor.default-dispatcher-4] [akka://polydeploy-baremetal/user/TFTP_Queue] 70-CD-60-74-24-9C (of class java.lang.String)
scala.MatchError: 70-CD-60-74-24-9C (of class java.lang.String)
    at com.polydeploy.baremetal.TFTPQueue$.handle_read(TFTPQueue.scala:40)
    at com.polydeploy.baremetal.TFTPQueue$.com$polydeploy$baremetal$TFTPQueue$$handle_request(TFTPQueue.scala:33)
    at com.polydeploy.baremetal.TFTPQueue$$anonfun$receive$1.applyOrElse(TFTPQueue.scala:14)
    at akka.actor.Actor$class.aroundReceive(Actor.scala:467)
    at com.polydeploy.baremetal.TFTPQueue$.aroundReceive(TFTPQueue.scala:10)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
    at akka.actor.ActorCell.invoke(ActorCell.scala:487)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)
    at akka.dispatch.Mailbox.run(Mailbox.scala:221)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:231)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

我想嘗試並舉例說明的是能夠向pxelinux.cfg/01-70-CD-60-74-24-9C發出TFTP請求,並取出MAC地址。

任何幫助都將不勝感激!

謝謝,利亞姆。

當正則表達式為([0-9A-F]{2}[:-])並且我請求文件70-就可以了

這是因為在這種情況下,您的正則表達式包含一個組。

這對我有用:

val MAC_REGEX = "(([0-9A-F]{2}[:-]){5}([0-9A-F]{2}))".r
"70-CD-60-74-24-9C" match {
    case MAC_REGEX(a, _*) => println(s"Client is coming from $a")
} 
// prints "Client is coming from 70-CD-60-74-24-9C"

之所以有效,是因為我將整個正則表達式包裝在一起。 a捕獲外部組,而_*是所有其他組的忽略匹配序列。 顯然, Regex的提取器返回一個列表,其中包含每個捕獲組的元素。

我覺得有更好的方法可以做到這一點...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM