/ 最近 .rdf 追記 編集 設定 本棚

脳log[20081110] >Ruby 初心者スレッド Part 22 >>861 (http://www.kt.rim.or.jp/%7ekbk/zakkicho/08/zakkicho0811a.html#D20081109-6 経由)



2008年11月10日 (月) 自動二輪でデュアルパーパス車(デュアルといいつつ実質オフ寄り)を嗜好し、自転車ではクロスバイク(の中でもロード寄り)を好むのに、共通点はどこにあるのかと思えば、軽くて扱いやすい所だったらしい。オートバイにライトウェイトスポーツというカテゴリはないのか。スーパーモタードだけなのか。(それでいいんだけど)

[正規表現] >Ruby 初心者スレッド Part 22 >>861 (http://www.kt.rim.or.jp/%7ekbk/zakkicho/08/zakkicho0811a.html#D20081109-6 経由)

if line =~ /.*Sector:<.*(Basic Materials|Conglomerates|Consumer Goods|Financial|Healthcare|Industrial Goods|Services|Technology|Utilities)/
    p $1
end 

HTMLをその場その場の正規表現で処理したくはないけど、それはそれとして、こうする。要は「Sector:HOGEHOGE」というテキストにタグがいろいろ付いていて、それらを無視してセクタ名を取り出したいということかと。

   /Sector:(?:<[^>]+>)*(Basic Materials|Conglomerates|Consumer Goods|Financial|Healthcare|Industrial Goods|Services|Technology|Utilities)/

元のパターン冒頭の .* は全く無駄。一度文字列全部を食べてしまうことに無駄以外の意味はない。(後ろから「Sector:」を探すか、前から「Sector:」を探すかという違いはあったりして)

二番目の .* が以降の文字列すべてを食べてしまうのも無駄。それにそれじゃあ「Sector:」から最も離れたセクタ名と同じ単語に一番最初にマッチしてしまう。

以上お目汚しでした。それより、この質問への最初の回答は金言。良いなあ(こんなレスがすぐに付くなんて)。

 正規表現は書き方を覚えないと駄目
 なぜなら、ほんの少し変えようと思っただけで別物になるから
 コピペでやろうとすると異常に遠回りになる

基本的に覚えることは

  • 文字クラスとメタ文字(\w,\n,\s,...)
  • アンカー(^,$,\b,...)と先読み(戻り読み)
  • パターンのグルーピングと選択
  • 量指定子(これは文字にもグループにも付けられる)

だけだもの。