2016-09-13 7 views
-1

私は、文字列を持っている...など、括弧や+記号などの特殊文字と正規表現エスケープは、|で区切られたエスケープ部分文字列ではありません。

str = "bookworms|actuarial-consultants|uninterruptible-power-supply-(ups)-experts|c++programming-developers" 

。私は、私は手動で逃げることができない|で区切られた多数のサブストリングを収容することができます

bookworms|actuarial-consultants|uninterruptible-power-supply-\(ups\)-experts|c\+\+programming-developers 

https://gyazo.com/d545ab1a8d7d178a6079f4b9cb125cce

私の文字列のように手動でそれらをエスケープしない限り、

uninterruptible-power-supply-(ups)-expertsc++programming-developersと一致することはできません。そして、文字列はクエリメソッドを介して生成されるためです。

Regexp.escapeを試しましたが、正しい出力がありませんでした。私はまだescape方法は、私の文字列に二重の\\を追加して、bookworms

https://gyazo.com/ae0bb43a1dc84f40deb18e3ed76d490e

のようにも、通常の部分文字列をuninterruptible-power-supply-(ups)-expertsc++programming-developersと一致することはできません。

bookworms\\|actuarial\\-consultants\\|uninterruptible\\-power\\-supply\\-\\(ups\\)\\-experts\\|c\\+\\+programming\\-developers 
+1

"私はRegexp.escapeを試しましたが、正しいものを出力しませんでした"とはどういう意味ですか?私たちはあなたが何を試みたか分かりませんが、あなたがそれを伝えるためには「脱出」します。 'Regexp.union'はあなたがやろうとしていることに対しても非常に便利です。 "[mcve]"を読んでください。私たちはあなたを助けるためにもっと多くの情報が必要です。 –

+1

'Regexp.escape'がバックスラッシュを倍増させていると思いますか? '' \\ "''は2つではなく、1つのバックスラッシュです。あなたが 'Regexp.escape(str)'を置くと、適切にエスケープされた文字列を取得していることがわかります。 –

+0

「または」もエスケープされていることを除いて、正しくエスケープされています。 –

答えて

1

それはあなたが私たちに語った少しからやっていることを伝えることはできないのですが、あなたは正しくRegexp.escapeを使用していないように聞こえます。 "OR"(|)は望ましくないとするエスケープされていることを

str = "bookworms|actuarial-consultants|uninterruptible-power-supply-(ups)-experts|c++programming-developers" 
Regexp.escape(str) 
# => "bookworms\\|actuarial\\-consultants\\|uninterruptible\\-power\\-supply\\-\\(ups\\)\\-experts\\|c\\+\\+programming\\-developers" 

注意:この上

瞑想。あなたは、文字列の配列を渡す場合

は、その後unionは、必要なときに脱出し、一つの大きなパターンにそれぞれ得られたエスケープパターンを連結します使用

Regexp.union(str.split('|')) 
# => /bookworms|actuarial\-consultants|uninterruptible\-power\-supply\-\(ups\)\-experts|c\+\+programming\-developers/ 

そのコードで:

regex = Regexp.union(str.split('|')) # => /bookworms|actuarial\-consultants|uninterruptible\-power\-supply\-\(ups\)\-experts|c\+\+programming\-developers/ 

'uninterruptible-power-supply-(ups)-experts'[regex] # => "uninterruptible-power-supply-(ups)-experts" 
'c++programming-developers'[regex] # => "c++programming-developers" 

示しますパターンは一致しています。

注意すべきことがありますが、それが基本です。

+0

それはすでにそれを行います。 –

+0

Sn-man、私は質問にそれを掲載することを意味しました。あなたの答えが始まったときに私は確信していません。いずれにしても、良い答えです。 –

+0

ありがとうございました。それから私は「組合」に驚いている。これは私にとって初めてのことです。 –

関連する問題