Ruby正则表达式排除

时间:2011-02-28 01:50:28

标签: ruby regex

@message_to = 'bob@google.com'

@cleaned = @message_to.match(/^(.*)+@/)

@cleaned正在返回bob @,我希望它只返回bob。我是否正确使用红宝石进行正则表达式?

由于

6 个答案:

答案 0 :(得分:5)

不需要太多正则表达

>> @message_to = "bob@google.com"
=> "bob@google.com"
>> @message_to.split("@",2)
=> ["bob", "google.com"]
>> @message_to.split("@",2)[0] if @message_to["@"]
=> "bob"
>>

答案 1 :(得分:2)

你想要这个:

@cleaned = @message_to.match(/^(.*)+@/)[1]

match返回MatchData个对象,其字符串版本为整个匹配项,当您处理MatchData as an array时,从索引1开始,捕获的组可用

我可能会选择更像这样的东西:

@cleaned = @message_to.match(/^([^@]+)@/)[1]

答案 2 :(得分:1)

比mu_is_too_short更短的代码是:

@cleaned = @message_to[/^([^@]+)@/, 1]

String#[]方法可以采用正则表达式。

答案 3 :(得分:1)

有一个较短的解决方案:

@cleaned = @message_to[/[^@]+/]

答案 4 :(得分:0)

最简单我在IRB控制台中工作的RegEx是:

@message_to = 'bob@google.com'
@cleaned = @message_to.match(/(.+)@/)[1]

同样可以从link开始尝试:

@cleaned = @message_to.match(/^(?<local_part>[\w\W]*?)@/)[:local_part]

答案 5 :(得分:0)

调整代码最明显的方法是使用前向肯定断言。而不是说“匹配bob@”,而是说“匹配bob,后跟@

@message_to = 'bob@google.com'

@cleaned = @message_to.match(/^(.*)+(?=@)/)

关于何时使用和不使用正则表达式的另一点:是的,在这种情况下使用正则表达式有点无意义。但是当你使用正则表达式时,添加验证也更容易:

@cleaned = @message_to.match(/^(([-a-zA-Z0-9!#$%&'*+\/=?^_`{|}~]+.)*[-a-zA-Z0-9!#$%&'*+\/=?^_`{|}~]+(?=@)/)

(是的,所有这些都在电子邮件地址中有效)