0

forループで正規表現を使用することを想定していますか?たとえば、ユーザーが以下のような形式でテキストボックスに大量の電子メールを入力するようにしたい場合、それを行うための最良の方法は何ですか?

Zoo bbb <zoo@email.com>, Alan T <at@gmail.xxx>, ........

情報を抽出し、names []、emails []を入力するにはどうすればよいですか?

4

2 に答える 2

2

正規表現を使用する場合は、次のパターンが一致します。

<([\w+\.\@]+)>+


Match 1
1.  zoo@email.com
Match 2
1.  at@gmail.xxx

あなたはそれをテストすることができます:http://rubular.com

あなたがすることは、を使用して見つかった一致を数えることですscan

これが私がまとめたサンプルコードです

s = "Zoo bbb <zoo@email.com>, Alan T <at@gmail.xxx>"

names = []
emails = []

s.scan(/[\s]?([\w\s]+)<([\w+\.\@]+)>+/).each do | m |
  names << m[0]
  emails << m[1]
end

puts "names = #{names}"
puts "emails = #{emails}"

出力:

names = ["Zoo bbb ", "Alan T "]
emails = ["zoo@email.com", "at@gmail.xxx"]
于 2012-11-17T10:28:26.323 に答える
1

これを試して:

test_string = "Zoo bbb <zoo@email.com>, Alan T <at@gmail.xxx>, James B <james.bond@m5.gov.co.uk>"

# Create regexp to match emails given this format "Alan T <at@gmail.xxx>, ..."
regexp = /\s*,?\s*(.*?)<(.*?)>/

# Scan string for regexp matches
matches = test_string.scan(regexp)

# Let's see what the matches are...
p matches # [["Zoo bbb ", "zoo@email.com"], ["Alan T ", "at@gmail.xxx"], ["James B ", "james.bond@m5.gov.co.uk"]] 

# Iterating over matches is easy
matches.each do |match_array|
    puts "Name:\t #{match_array[0]}"
    puts "Email:\t #{match_array[1]}"
end

# To extract all names and emails into individual arrays:
names = []
emails = []
matches.each do |match_array|
    names << match_array[0]
    emails << match_array[1]
end

p names # ["Zoo bbb ", "Alan T ", "James B "] 
p emails # ["zoo@email.com", "at@gmail.xxx", "james.bond@m5.gov.co.uk"]
于 2012-11-17T10:39:05.050 に答える