Scala REGEX匹配MAC地址

时间:2015-04-28 11:28:18

标签: regex scala mac-address tftp

晚上好Stackoverflow,

我被困在一个我无法获得Scala正则表达式匹配的地方,这是我的代码

([0-9A-F]{2}[:-])

当正则表达式为70-并且我请求文件70-CD-60-74-24-9C时,它很好并且吐出客户端来自70"但是当它是满的时候正则表达式和我请求[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

我想要尝试和判断的是能够为operator+=提供TFTP请求并拔出MAC地址。

非常感谢任何和所有帮助!

谢谢,利亚姆。

1 个答案:

答案 0 :(得分:1)

  

当正则表达式为([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的提取器返回一个列表,其中包含每个捕获组的元素。

我觉得有一种更好的方法可以做到这一点......