我的阶版本2.7.7

林试图从一个较大的字符串中提取的电子邮件地址。字符串本身不遵循任何格式。代码我有:

import scala.util.matching.Regex
import scala.util.matching._
val Reg = """\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b""".r
"yo my name is joe : joe@gmail.com" match {
    case Reg(e) => println("match: " + e)
    case _ => println("fail")
}

的正则表达式传入RegExBuilder但没有通过对阶。此外,如果有另一种方式来做到这一点没有正则表达式,这将是罚款也。谢谢!

有帮助吗?

解决方案

由于艾伦·摩尔指出的那样,你需要将(?i)添加到模式的开始,使之不区分大小写。还要注意的是使用正则表达式的整个字符串匹配直接。如果你想找到一个较大的字符串中的一个,你可以调用的正则表达式的类似的方法findFirstIn()或使用一个。

val reg = """(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b""".r
reg findFirstIn "yo my name is joe : joe@gmail.com"  match {
    case Some(email) => println("match: " + email)
    case None => println("fail")
}

其他提示

它看起来像你试图做一个不区分大小写的搜索,但你不指定任何地方。尝试添加(?i)到正则表达式的开头:

"""(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b""".r

那么,如何做到这一点以外的RE可能很多混乱。下一步行动将可能是一个组合符解析器。大量的随机字符串解剖代码会更加普遍,几乎可以肯定一大堆更痛苦。在部分什么是合适的战术取决于你如何识别完成(以及如何严格或宽松)需要。例如,常见的形式:Rudolf Reindeer <rudy.caribou@north_pole.rth>不是由你的RE接受(即使在区分大小写的放宽)。盛放的RFC 2822地址解析是相当有挑战性的基于RE的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top