Developer's Blog

正規表現でちょっと便利に文字列検索

こんにちは、開発担当の森本です

エディタやプログラムなどでちょっと条件を付けて検索・置換したいとき、正規表現が使えるとメッチャ楽ですよね!
もちろん Sleipnir の開発においても正規表現は各所で活躍しています。

先日、「正規表現って名前の割に方言(処理系によって違う書き方)が多いよね」という話が出たのですが、
そのとき「ひょっとして拡張構文を使えば、今まで出来無いと思い込んでいたこともできるのかも」と思い立ったので、調べてみました。
ちなみに、今回の記事の表現は余り特殊な表現は使用しておりませんので JavaScript, Perl など広い処理系で使用できるはずです。

○○ AND ×× の正規表現

		//「フェンリル」と「スレイプニル」を両方含む行
		^(?=.*フェンリル)(?=.*スレイプニル).*
	

こんな風に書くことで、AND 演算が表現できます。

		// A~Z すべてのアルファベットを含む行
		^(?=.*[aA])(?=.*[bB])(?=.*[cC])(?=.*[dD])(?=.*[eE])(?=.*[fF])(?=.*[gG])(?=.*[hH])(?=.*[iI])(?=.*[jJ])(?=.*[kK])(?=.*[lL])(?=.*[mM])(?=.*[nN])(?=.*[oO])(?=.*[pP])(?=.*[qQ])(?=.*[rR])(?=.*[sS])(?=.*[tT])(?=.*[uU])(?=.*[vV])(?=.*[wW])(?=.*[xX])(?=.*[yY])(?=.*[zZ]).*
	

もっと数を増やすこともできます!

		//「フェンリル」もしくは 「fenrir」と、
		//「Sleipnir for Windows」もしくは「Sleipnir for Mac」を両方含む行
		^(?=.*(フェンリル|fenrir))(?=.*Sleipnir for (Windows|Mac)).*
	

もちろん文字列だけでなく正規表現の AND 演算も可能です。

		//「無駄」が 5 回以上出現する行
		^(?=(.*無駄){5}).*
	

n回以上、と言う形で出現回数を指定することも可能です。

○○ を含まない正規表現

		//「大阪」を含まない行
		^(?!.*大阪).*
	

実は、いままでやり方がよく解らなくて困っていたのですが、否定表現もこんなに簡単に記述できます。

		//「フェンリル」と、「Sleipnir for Windows」もしくは
		//「Sleipnir for Mac」を両方含み、「大阪」を含まない行
		^(?=.*フェンリル)(?=.*Sleipnir for (Windows|Mac))(?!.*大阪).*
	

AND 演算と混ぜて使用することもできます。

		//「無駄」が 2~4 回出現する行
		^(?=(.*無駄){2})(?!(.*無駄){5}).*
	

否定表現を応用するとn回未満、の表現が書けます。
n回以上、の表現と組み合わせると範囲を指定することも可能です。

まとめ

特にエディタで検索・置換をしている時など、一つの表現でいろいろしたい場合に便利に使えるのではないでしょうか。
他にも便利な表現がありそうなので、見つけたらまた書くようにします。

ソーシャルアカウント

Sleipnir の Facebook ページでは、ユーザーの方たちとのコミュニケーションや最新情報の投稿などをしています。よろしければいいね!してください!

Copyright © 2019 Fenrir Inc. All rights reserved.