私はこれを持っています:
str = "some html code [img]......[/img] some html code [img]......[/img]"
そして私はこれを取得したい:
["[img]......[/img]","[img]......[/img]"]
BBコードは使用しないでください。悪だ。
BBCode が誕生したのは、開発者が怠惰すぎて HTML を正しく解析できず、独自のマークアップ言語を発明することにしたときです。怠惰のすべての製品と同様に、結果は完全に一貫性がなく、標準化されておらず、広く採用されています。
Markdown (Stack Overflow が使用する言語) やTextileなど、より使いやすいマークアップ言語を使用してみてください。どちらにも Ruby 用のパーサーがあります。
それでも私のアドバイスに耳を傾けず、BBCode を使用することを選択する場合は、車輪を再発明せずにBBCode パーサーを使用してください。質問に直接答えるには、最も望ましくないオプションがあります。正規表現を使用します。
/\[img\].*?\[\/img\]/
rubularに見られるように。を使用しますが、タグ/\[img\](.*?)\[\/img\]/
内のコンテンツを抽出します。img
これは非常に壊れやすく、ネストされたimg
タグがあると壊れてしまうことに注意してください。したがって、パーサーを使用することをお勧めします。
irb(main):001:0> str = "some html code [img]......[/img] some html \
code [img]......[/img]"
"some html code [img]......[/img] some html code [img]......[/img]"
irb(main):002:0> str.scan(/\[img\].*?\[\/img\]/)
["[img]......[/img]", "[img]......[/img]"]
これは、正確な質問に基づいた非常に具体的な回答であることに注意してください。たとえば、画像タグ内に画像タグstr
を追加して変更すると、すべての地獄が解き放たれます。
GoogleCodeにはルビーBBCODEパーサーがあります。
これには正規表現を使用しないでください。
str = "some html code [img]......[/img] some html code [img]......[/img]"
p str.split("[/img]").each{|x|x.sub!(/.*\[img\]/,"")}