Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何从这个字符串中提取电子邮件地址?_Ruby_Regex_String - Fatal编程技术网

Ruby 如何从这个字符串中提取电子邮件地址?

Ruby 如何从这个字符串中提取电子邮件地址?,ruby,regex,string,Ruby,Regex,String,以下是两种可能的电子邮件字符串方案: email = "Joe Schmoe <joe@example.com>" email = "joe@example.com" email=“Joe Schmoe” 电子邮件=”joe@example.com" 我总是只想要joe@example.com 那么,什么样的正则表达式或方法可以解释这两种情况呢?如果你知道你的电子邮件总是在中,那么你可以用它们作为开始和结束索引来创建一个子字符串。如果你知道你的电子邮件总是在中,那么你可以用它们来

以下是两种可能的电子邮件字符串方案:

email = "Joe Schmoe <joe@example.com>"
email = "joe@example.com"
email=“Joe Schmoe”
电子邮件=”joe@example.com"
我总是只想要
joe@example.com


那么,什么样的正则表达式或方法可以解释这两种情况呢?

如果你知道你的电子邮件总是在
中,那么你可以用它们作为开始和结束索引来创建一个子字符串。

如果你知道你的电子邮件总是在
中,那么你可以用它们来创建一个子字符串开始索引和结束索引。

如果您愿意加载额外的库,这已经在TMail gem中解决了:

TMail::Address.parse('Mikel A.').spec
=> "spam@lindsaar.net"

如果您愿意加载一个额外的库,这已在TMail gem中解决:

TMail::Address.parse('Mikel A.').spec
=> "spam@lindsaar.net"

如果只有这两种格式,请不要使用正则表达式。只需使用简单的字符串解析。如果找到“
”对,则从它们之间拉出电子邮件地址,如果找不到这些字符,则将整个字符串视为电子邮件地址


正则表达式在您需要时非常有用,但是如果您有非常简单的模式,那么加载和解析正则表达式并使用它进行处理的开销将比简单的字符串操作高得多。除了一种语言的核心之外,不加载额外的库几乎总是比采用不同的方式更快。

如果这是仅有的两种格式,不要使用正则表达式。只需使用简单的字符串解析。如果找到“
”对,则从它们之间拉出电子邮件地址,如果找不到这些字符,则将整个字符串视为电子邮件地址


正则表达式在您需要时非常有用,但是如果您有非常简单的模式,那么加载和解析正则表达式并使用它进行处理的开销将比简单的字符串操作高得多。除了一种语言中非常核心的库之外,不加载额外的库几乎总是比采用不同的方法更快。

以下是您的示例:

def find_email(string)
  string[/<([^>]*)>$/, 1] || string
end

find_email "Joe Schmoe <joe@example.com>" # => "joe@example.com"
find_email "joe@example.com"              # => "joe@example.com"
def find_电子邮件(字符串)
字符串[/]*)>$/,1]| |字符串
结束
查找电子邮件“Joe Schmoe”#=>“joe@example.com"
查找电子邮件“joe@example.com"              # => "joe@example.com"

以下是您的示例:

def find_email(string)
  string[/<([^>]*)>$/, 1] || string
end

find_email "Joe Schmoe <joe@example.com>" # => "joe@example.com"
find_email "joe@example.com"              # => "joe@example.com"
def find_电子邮件(字符串)
字符串[/]*)>$/,1]| |字符串
结束
查找电子邮件“Joe Schmoe”#=>“joe@example.com"
查找电子邮件“joe@example.com"              # => "joe@example.com"

您只需要提取一部分有效电子邮件地址,还是所有RFC有效电子邮件地址?或者,换句话说,你只是在寻找简单的电子邮件地址吗?我不是在寻找有效的电子邮件地址。我正在绑定一个API,这是我接收电子邮件地址的两种格式。您只需要提取一部分有效电子邮件地址,还是所有RFC有效电子邮件地址?或者,换句话说,你只是在寻找简单的电子邮件地址吗?我不是在寻找有效的电子邮件地址。我正在绑定一个API,这是我接收电子邮件地址的两种格式。我不想为此加载整个库。似乎可以通过一些简单的字符串解析来完成。这里是交易。。。如果您只是解析有限且相当一致的数据集,那么可以解析它。OTOH,如果您正在解析可能来自任何地方的数据,那么您将很难正确处理它-有效的电子邮件地址非常复杂。不想为此加载整个库。似乎可以通过一些简单的字符串解析来完成。这里是交易。。。如果您只是解析有限且相当一致的数据集,那么可以解析它。OTOH,如果您正在解析可能来自任何地方的数据,那么您将很难正确处理这些数据-有效的电子邮件地址非常复杂。