2

の反対語は何Regexp.escapeですか?

> Regexp.escape('A & B')
=> "A\\ &\\ B"
> # do something, to get the next result: (something like Regexp.unescape(A\\ &\\ B))
=> "A & B"

元の値を取得するにはどうすればよいですか?

4

4 に答える 4

1

このようなものを使用できますか?

def unescape(s)
  eval %Q{"#{s}"}
end

puts unescape('A\\ &\\ B')

この質問へのクレジット。

コードパッドのデモ

正規表現ソリューションに問題がない場合は、これを使用できます。

res = s.gsub(/\\(?!\\)|(\\)\\/, "\\1")

コードパッドのデモ

于 2013-09-30T10:08:59.193 に答える
1

これを試して

>> r = Regexp.escape("A & B (and * c [ e] + )")
# => "A\\ &\\ B\\ \\(and\\ \\*\\ c\\ \\[\\ e\\]\\ \\+\\ \\)"
>> r.gsub("\\(","(").gsub("\\)",")").gsub("\\[","[").gsub("\\]","]").gsub("\\{","{").gsub("\\}","}").gsub("\\.",".").gsub("\\?","?").gsub("\\+","+").gsub("\\*","*").gsub("\\ "," ")
# => "A & B (and * c [ e] + )"

基本的に、これら(, ), [, ], {, }, ., ?, +, *は正規表現のメタ文字です。また\、エスケープ文字として使用されます。

呼び出しのチェーンはgsub()、エスケープされたパターンを対応する実際の値に置き換えます。

これを乾かす方法があると確信しています。

更新user2503775によって提案されたDRYバージョン

>> r.gsub("\\","")

更新

以下は正規表現の特殊文字です

    [,],{,},(,),|,-,*,.,\\,?,+,^,$,<space>,#,\t,\f,\v,\n,\r
于 2013-09-30T11:56:16.440 に答える
1

正規表現の使用\\(?=([\\\*\+\?\|\{\[\(\)\^\$\.\#\ ]))\

\r\nエスケープされていない文字列を提供する必要がある場合は、シーケンスを対応する CrLfに置き換えるだけで済みます。

"There\ is\ a\ \?\ after\ the\ \(white\)\ car\.\ \r\n\ it\ should\ be\ http://car\.com\?\r\n"

にエスケープされていません:

"There is a ? after the (white) car. \r\n it should be http://car.com?\r\n"

\r\n を削除すると、次のようになります。

There is a ? after the (white) car. 
 it should be http://car.com?
于 2013-09-30T10:02:10.813 に答える