如何从ruby上的以下regexp中删除引号?

如何从ruby上的以下regexp中删除引号?,ruby,regex,Ruby,Regex,我有以下正则表达式: /["]*(?<name>.*)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match("\"The Boss\" <daboss@aol.com>") 我怎样才能摆脱老板的最后一句话 请随意重构我的正则表达式,使其更具意义…您可能不想在名称中使用引号。这将修复您的示例: /["]*(?<name>[^"]*)[\"]*?\s*[<(](?<email>\w.*)[>

我有以下正则表达式:

/["]*(?<name>.*)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match("\"The Boss\" <daboss@aol.com>")
我怎样才能摆脱老板的最后一句话


请随意重构我的正则表达式,使其更具意义…

您可能不想在名称中使用引号。这将修复您的示例:

/["]*(?<name>[^"]*)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match("\"The Boss\" <daboss@aol.com>")
/[“]*(?[^”]*)[\“]*?\s*[)]/.match(“\”老板“)
如果你想支持反斜杠转义,你需要更复杂的东西。

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

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

这里有一个关于regexp的重要教训:无论何时编写regexp,不要只考虑要匹配的内容;要考虑不想匹配的内容。regexp的一个常见错误源是匹配太多

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