Ich muss den Wert einer Zeichenfolge in meinen regulären Ausdruck in Ruby einsetzen. Gibt es eine einfache Möglichkeit, dies zu tun? Beispielsweise:
foo = "0.0.0.0"
goo = "here is some other stuff 0.0.0.0"
if goo =~ /value of foo here dynamically/
puts "success!"
end
Antworten:
Entspricht dem Einfügen von Zeichenfolgen.
quelle
Beachten Sie, dass die
Regexp.quote
in Jon L. Antwort ist wichtig!Wenn Sie nur die "offensichtliche" Version machen:
Dann werden die Punkte in Ihrem Match-Text als Regexp-Platzhalter behandelt und stimmen
"0.0.0.0"
überein"0a0b0c0"
.Beachten Sie auch, dass Sie dies einfach tun können, wenn Sie wirklich nur nach einer Teilzeichenfolgenübereinstimmung suchen möchten
Dies erfordert kein zusätzliches Zitieren oder Sorgen um Sonderzeichen.
quelle
.quote()
) auch nützlich sein kann, wenn Sie einen regulären Ausdruck mithilfe einer Zeichenfolge erstellen möchten.if goo.include?(foo)
" => True, wenn Sie an der Existenzprüfung interessiert sind. Wenn Sie daran interessiert sind, String.gsub zu ersetzen und bereits zu verwenden, ist Regexp.quote möglicherweise Ihre einzige Option.Regexp.new
oder zu entkommenRegexp.compile
.Wäre wahrscheinlich
Regexp.escape(foo)
ein Ausgangspunkt, aber gibt es einen guten Grund, warum Sie die konventionellere Ausdrucksinterpolation nicht verwenden können :"my stuff #{mysubstitutionvariable}"
?Sie können auch nur
!goo.match(foo).nil?
eine Literalzeichenfolge verwenden.quelle
quelle
Verwenden Sie Regexp.new:
quelle
Hier ist eine begrenzte, aber nützliche andere Antwort:
Ich habe festgestellt, dass ich ohne Regexp.quote oder Regexp.escape problemlos in einen regulären Ausdruck einfügen kann, wenn ich nur einfache Anführungszeichen für meine Eingabezeichenfolge verwendet habe: (eine IP-Adressübereinstimmung)
einfache Anführungszeichen interpretieren nur \\ und \ '.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
Dies hat mir geholfen, als ich mehrmals denselben langen Teil einer Regex verwenden musste. Nicht universell, passt aber zum Fragenbeispiel, glaube ich.
quelle
quelle