• ベストアンサー

正規表現教えてください

たとえば, secureとenergyという単語を含む英語を検索する場合どう書けばよいでしょうか? もう少し細かい条件として, secureとenergyの間にはさまる単語は4語以内(0語から4語),単語と単語の間のスペースは1語です。 つまり,以下,英文としての正否はともかく, secure a a lot of energy secure a lot of energy secure lot of energy secure a energy secure energy などが検索できればよいのです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

量指定子を使えば可能だと思います。 あまりちゃんとした検証をとった訳ではないのですが、これでどうでしょうか 確認した処理系は鬼車です。 # 正規表現 \bsecure( ?\w* ?){0,4}energy\b # マッチする secure a a lot of energy secure a lot of energy secure lot of energy secure a energy secure energy # マッチしない secure so many a lot of energy

noname#134358
質問者

お礼

ありがとうございました。ばっちりです。 自分なりにその後, secure.+energy として,間が開きすぎのものは手作業でみていたりしましたが教えていただいたもので,うまくできました。 大変助かりました。

その他の回答 (2)

  • asciiz
  • ベストアンサー率70% (6825/9705)
回答No.2

最後の energy の単語頭を間違えました。 \<secure\>(\s|\s\w\s|\s\w\s\w\s|\s\w\s\w\s\w\s|\s\w\s\w\s\w\s\w\s)\<energy\> こちらで。

  • asciiz
  • ベストアンサー率70% (6825/9705)
回答No.1

簡単に書くなら "\<secure\>.*\<energy\>" ですかね。 \< = 単語の始まり(直前が空白類) \> = 単語の終わり(直後が空白類) 間が「.*」なので、4語以内と言わずどんなに長くてもマッチしてしまいますが。 0語~4語にマッチさせたいとなると、 \s=空白類(スペース・タブ・改行) \w=英単語(スペースを含まない英数文字列) なので、いずれかにマッチする選択( | )と組み合わせて、 (\s|\s\w\s|\s\w\s\w\s|\s\w\s\w\s\w\s|\s\w\s\w\s\w\s\w\s) こんな表記になります。 これを .* の代わりに記述すれば、 \<secure\>(\s|\s\w\s|\s\w\s\w\s|\s\w\s\w\s\w\s|\s\w\s\w\s\w\s\w\s)<energy\> となるでしょう。

関連するQ&A

専門家に質問してみよう