【问题标题】:String regex matching in ErlangErlang中的字符串正则表达式匹配
【发布时间】:2013-06-13 16:39:04
【问题描述】:

如何在 Erlang 中进行正则表达式匹配?

我所知道的是: f("AAPL" ++ 输入字符串) -> true.

我需要匹配的行 "AAPL,07-May-2010 15:58,21.34,21.36,21.34,21.35,525064\n"

在 Perl 正则表达式中:^AAPL,*(或类似的)

在 Erlang 中?

【问题讨论】:

  • 在这种情况下,您给出的示例将与字符串匹配,因此我假设您确实在更一般的情况下。在这种情况下,使用已回答的“re”模块。
  • 如果您只是匹配字符串的前五个确切字符,则正则表达式是您可以做到的最慢和最复杂的方法。
  • @Dustin 前五个字符是动态的。那你有什么建议呢?
  • 当您说角色是动态的时,您的意思并不清楚。对于您给出的示例,我没有使用正则表达式的语言。搭配太简单了。

标签: regex string erlang


【解决方案1】:

使用re 模块,例如:

...
String = "AAPL,07-May-2010 15:58,21.34,21.36,21.34,21.35,525064\n",
RegExp = "^AAPL,*",
case re:run(String, RegExp) of
  {match, Captured} -> ... ;
  nomatch -> ...
end,
...

【讨论】:

  • 等价于re:run(String, RegExp)
  • 这与运行有何不同 => regexp:first_match(Line, "^AAPL,*" ) ?
  • 嗯,它可能没有什么不同,但根据 regexp 模块文档“它已被 re 模块淘汰,并将在未来的版本中删除”。所以,你绝对应该更喜欢 re 模块。
  • 准确地说,case 子句中的匹配实际上是 {match,ListOfMatchArea} 其中 ListOfMatchArea 的形式是 [{A,B}]
猜你喜欢
  • 1970-01-01
  • 2012-06-05
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多