プログラミング

AtomでAND検索する正規表現パターンを考えた

台湾に行ってみようかなぁと思って、前にメモしたSIMに関するメモを見つけようとしたけど、
よくよく考えるとAtomってand検索できないじゃん、ってことに気づいた。

つまり、Evernoteみたいな一般的なAND検索ができないってことですね。
これをどうやるか、というのが今回の問題。

例として、”台湾 sim”という検索クエリでAND検索をしたい、とする。

(sim|台湾)(.*)(sim|台湾)

まずこれを試した。
これだと、


# 台湾 sim カード



# sim 台湾


# 台湾 台湾

“台湾 台湾”っていう行も引っかかってしまう。

(台湾)(.*)(sim)|(sim)(.*)(台湾)

こうするしかないですね。
検索キーワードが3つ、4になると4x3x2x1…というように正規表現が伸びていくことになりますが。

これで、行の検索はできるようになりました。
…これぐらいならパッケージとか探せばありそうですがね。

ただせっかく正規表現と組み合わせて高度な検索が可能なわけなので、
もう少し捻ってみます。

3行の中でAND検索する

任意の3行の中の文字列を検索します。

(台湾)(.*\n?){1,2}(sim)|(sim)(.*\n?){1,2}(台湾)

おk.

マークダウンh1の範囲を検索したかった

“#”で区切られた範囲の文字列から検索することで、1つのファイル、Evernote的に言えば、1つのノートを検索するように検索することができるのでは、と
思いましたが、頑張ったけどできませんでした。

^#(.*\n?)+?^#

検索結果部分が被らない仕様なようで、

(^#(.*\n?)+?^#)+?
(^#(.*\n?)+?^#)?

効果なし

^#(.*\n?)+?^(?!^#)

否定使えないみたいです。

まとめ

これ使っておけばいいかと思います。

(台湾)(.*\n?){1,2}(sim)|(sim)(.*\n?){1,2}(台湾)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です