/ / Ruby Regulärer Ausdruck Exklusiv - Rubin, Regex

Ruby Regular Expression Excluding - Ruby, Regex

@message_to = "bob@google.com"

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

@cleaned gibt bob @ zurück, wo ich nur bob zurückgeben möchte. Mache ich die Regex mit Rubin richtig?

Vielen Dank

Antworten:

2 für die Antwort № 1

Du willst das:

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

match gibt a zurück MatchData Objekt und die String-Version davon ist die gesamte Übereinstimmung, die erfassten Gruppen sind ab Index 1 verfügbar, wenn Sie das behandeln MatchData als ein Array.

Ich würde wahrscheinlich mit so etwas mehr gehen:

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

5 für die Antwort № 2

Kein regelmäßiger Ausdruck nötig

>> @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 für die Antwort № 3

Es gibt eine kürzere Lösung:

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

1 für die Antwort № 4

Ein noch kürzerer Code als mu_is_too_short wäre:

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

Das Zeichenfolge # [] Methode kann einen regulären Ausdruck annehmen.


0 für die Antwort № 5

Das einfachste RegEx, das ich in der IRB-Konsole arbeiten konnte, ist:

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

Auch daraus Verknüpfung du könntest es versuchen:

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

0 für die Antwort № 6

Die naheliegendste Möglichkeit, Ihren Code anzupassen, ist die Verwendung einer positiven Assertion nach vorne. Anstelle von "Match" bob@"Sie sagen jetzt" passen zusammen bob, wenn ein a folgt @"

@message_to = "bob@google.com"

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

Ein weiterer Punkt, wann man Regex benutzen und nicht verwenden soll: Ja, die Verwendung eines Regex ist in diesem Fall etwas sinnlos. Wenn Sie jedoch einen regulären Ausdruck verwenden, ist es einfacher, auch eine Bestätigung hinzuzufügen:

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

(und ja, alle diese sind in E-Mail-Adressen gültig)