0

リンク(2)を(簡単に)回避してリンク(1)の先頭を置き換える方法がわかりません。Rubyでの回答をいただければ幸いですが、ロジックが分かればそれも良いでしょう。

出力は次のようになります。

 message = "For Last Minute rentals, please go to:
    <span class='external_link' href-web='http://www.mydomain.com/thepage'>http://www.mydomain.com/thepage</span> (1)

    For more information about our events, please visit our website: 
    <span class='external_link' href-web='http://www.mydomain.com'>http://www.mydomain.com</span> (2)"

しかし、それは次のとおりです。

    message = "For Last Minute rentals, please go to:
    <span class='external_link' href-web='<span class='external_link' href-web='http://www.mydomain.com'>http://www.mydomain.com</span>/thepage'><span class='external_link' href-web='http://www.mydomain.com'>http://www.mydomain.com</span>/thepage</span> (1)

    For more information about our events, please visit our website: 
    <span class='external_link' href-web='http://www.mydomain.com'>http://www.mydomain.com</span> (2)"

コードは次のとおりです(編集:スパンを取り出しました):

     message = "For Last Minute rentals, please go to:
    http://www.mydomain.com/thepage

    For more information about our events, please visit our website: 
    http://www.mydomain.com"

   links_found = URI.extract(message, ['http', 'https'])

   for link_found in links_found          
     message.gsub!(link_found,"<span class='external_link' href-web='#{web_link}'>#{link_found}</span>")
   end

考え?

4

2 に答える 2

0

まず、ルール 1 として、HTML や XML を扱うときの最も些細なこと以外は、文字列操作や正規表現を気にしないことです。それ以外のことをすると、確実に狂気に陥ります。

代わりに、正気を保ち、本物のパーサーを使用してください。Ruby については Nokogiri のみを参照することを強くお勧めします。

次のコードを検討してください。

require 'nokogiri'

message = "For Last Minute rentals, please go to:
<span class='external_link' href-web='http://www.mydomain.com/thepage'>http://www.mydomain.com/thepage</span> (1)

For more information about our events, please visit our website: 
<span class='external_link' href-web='http://www.mydomain.com'>http://www.mydomain.com</span> (2)"

doc = Nokogiri::HTML(message)

external_spans = doc.search('span.external_link')

url1 = external_spans[0]['href-web'] # => "http://www.mydomain.com/thepage"
text1 = external_spans[0].text       # => "http://www.mydomain.com/thepage"
url2 = external_spans[1]['href-web'] # => "http://www.mydomain.com"
text2 = external_spans[1].text       # => "http://www.mydomain.com"

urlとはそれぞれからのとからtext1の URL です。span 1url2text2span 2

ソースと目的の出力に違いが見られなかったので、それらをどうしたいのかわかりません。何でもする。Nokogiri のようなパーサーを使用すると、HTML または XML DOM から情報を取得したり、置き換えたり、移動したり、新しいものをつなぎ合わせたりすることができます。

于 2013-04-25T02:19:01.280 に答える
0

あなたの問題はに関連していると思いますURI.extract。それが通過すると、「http」のすべてmessageのインスタンスがプルされます。これは、最初の行では、 の内側と外側の両方の「http」になります。<span>

さらに明確にするために、と の両方をlinks_found持つ配列になります。一致するパターンとして gsub に渡すだけなので、配列内のすべてのオブジェクトが置き換えられます<span...href-web:...http...</span>link_foundlinks_found[]

于 2013-04-25T00:24:14.937 に答える