2010-08-19 8 views

Odpowiedz

58
Regexp.new(Regexp.quote('http://www.microsoft.com/')) 

Regexp.quote po prostu ucieka od wszelkich znaków, które mają specjalne znaczenie w wyrażeniu regularnym; pobiera i zwraca ciąg znaków. Zauważ, że . jest również specjalny. Po cytowaniu można dołączyć do regexp w razie potrzeby przed przekazaniem do konstruktora. Prosty przykład:

Regexp.new(Regexp.quote('http://www.microsoft.com/') + '(.*)') 

Dodaje grupę przechwytującą do końca ścieżki.

+5

Oczywiście działa to też: 'String.match (/ # {Regexp.quote ('http://www.microsoft.com/')} /) ' –

+0

Zastępuje wszystkie tokeny" CURRENT_YEAR "za pomocą czterocyfrowej grupy przechwytywania: ' Regexp.new (input_string.split ("CURRENT_YEAR"). Map {| p | Regexp.quote (p)} .join ("(\\ d {4})")) ' –

+0

Biorąc to pod uwagę, czy to nie powinno być sukcesem? umieszcza "Sukces", jeśli Regexp.new (Regexp.quote (".")). Match ("A") – Joe

4

Regexp.quote lub Regexp.escape może być wykorzystane do automatycznego uciec rzeczy dla ciebie:

http://ruby-doc.org/core/classes/Regexp.html#M001195

Rezultatem mogą być przekazywane do Regexp.new do utworzenia obiektu RegExp, a następnie można nazwać .match metody obiektu i podanie to ciąg do dopasowania (przeciwna kolejność od string.match(/regex/)).

8

Można również użyć dowolnych ograniczniki w Ruby dla wyrażeń regularnych przy użyciu% R oraz określenie znaku przed wyrażeniem regularnym, na przykład:

%r!http://www.microsoft.com/! 
+6

Podczas gdy pomaga to uniknąć znaków "/", nie pomaga w rzeczach takich jak nawiasy, nawiasy i inne znaki specjalne. – Amber

+3

"http://www-microsoft.com/" mecze. Niebezpieczny. – kuboon

0

można po prostu użyć apostrofów do ucieczki.

string.match('http://www.microsoft.com/') 

można również użyć %q{} jeśli trzeba apostrofów w samym tekście. Jeśli potrzebujesz ekstrapolacji zmiennych w ciągu, użyj %Q{}. To jest odpowiednik podwójnych ofert ". Jeśli ciąg zawiera wyrażenia regex (np .*?()[]^$), które chcesz ekstrapolować, użyj // lub% R {}

-2

dla wygody po prostu zdefiniować

def regexcape(s) 
    Regexp.new(Regexp.escape(s)) 
end 
Powiązane problemy