0

Ruby (on Rails) の正規表現に問題があります。私はこれに比較的慣れていません。

テスト文字列は http://www.xyz.com/017010830343 ?$ProdLarge$ です。

「$ProdLarge$」を削除しようとしています。つまり、$ 記号とその間のすべての記号です。

私の正規表現は次のとおりです: \$\w+\$

Rubular は、私の表情は大丈夫だと言っています。http://rubular.com/r/NDDQxKVraK

しかし、コードを実行すると、一致するものが見つからないとアプリに表示されます。以下のコード:

some_array.each do |x|
   logger.debug "scan #{x.scan('\$\w+\$')}"
   logger.debug "String? #{x.instance_of?(String)}"

   x.gsub!('\$\w+\$','scl=1')

   ...

ロガーのデバッグ行に「[]」の結果が表示されます。文字列が真であることが確認されました。そして、gsub ラインは効果がありません。

何を修正する必要がありますか?

4

2 に答える 2

5

/regex/の代わりに使用'regex':

> "http://www.xyz.com/017010830343?$ProdLarge$".gsub(/\$\w+\$/, 'scl=1')
=> "http://www.xyz.com/017010830343?scl=1"
于 2013-01-14T20:11:41.460 に答える
2

このタスクには正規表現を使用せず、正規表現用に設計されたツールURIを使用してください。クエリを削除するには:

require 'uri'

url = URI.parse('http://www.xyz.com/017010830343?$ProdLarge$')
url.query = nil

puts url.to_s
=> http://www.xyz.com/017010830343

別のクエリに変更するには、次の代わりにこれを使用しますurl.query = nil

url.query = 'scl=1'

puts url.to_s
=> http://www.xyz.com/017010830343?scl=1

URI は必要に応じて値を自動的にエンコードするため、手間が省けます。さらに URL 管理機能が必要な場合は、Addressable::URIを参照してください。

于 2013-01-15T01:21:01.677 に答える