如何从ruby上的以下正则表达式中删除引用?

时间:2012-02-10 19:26:20

标签: ruby regex

我有以下正则表达式:

/["]*(?<name>.*)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match("\"The Boss\" <daboss@aol.com>")

并获得以下结果:

name = The Boss"
email = daboss@aol.com

如何摆脱The Boss的最后一句话“???

随意重构我的正则表达式以使其更具感性......

2 个答案:

答案 0 :(得分:2)

问题是(?<name>).*,它会吃任何东西,包括双引号。解决这个问题的简单方法是将其更改为.*?。 (这是一个不情愿的匹配器;它匹配尽可能少的字符,而不是尽可能多的字符。)

另一种方法是使用[^"]*而不是.*

这里有一个关于正则表达式的重要教训:每当你写一个正则表达式时,不要只考虑你想要匹配的东西;想想你想要匹配的东西。使用regexp的非常常见错误源与匹配

答案 1 :(得分:1)

您可能希望禁用名称中的引号。这将解决您的示例:

/["]*(?<name>[^"]*)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match("\"The Boss\" <daboss@aol.com>")

如果你想支持反斜杠转义,你需要更复杂的东西。