・ EmEditor で正規表現処理(2)

・「往往」や「默默」の検索

文学的レトリック(修辞)の調査で「悠然」と「悠悠」の使用分布を調べたいことがあります。調べたい対象がはっきりしている場合は目的の語を直接検索すれば良いので、それほど問題はありません。でも、こうした同じ字を2つ並べた双字を網羅的に集めたいとなると直接検索では埒(らち)が明きません。こういう時は以下のような正規表現を用いて検索を行うといいでしょう。

(.)\1

まず " . " は前回EmEditor で正規表現処理(1)も登場しましたが、"任意の1文字" を意味するメタ文字用語解説です。"任意の1文字" は数字でも記号でも漢字でも何でも構いません。この " . " を、 ( ) というメタ文字で括って括弧内の内容(つまり " . " )を一時的にに記憶させます。( ) で括って記憶させた文字(列)は " \1 " で呼び出せるので、これを " ( . ) " の直後に置きます。ちなみに ( ) が2つ以上ある場合には、前方にあるものから順に \1・\2・\3 …を使って呼び出します。ともかく、" ( . ) \1 " で「任意の1文字が2つ連続して出現する個所」という意味の正規表現になります。

これだけでも充分かも知れませんが、実は " ( . ) \1 " では連続するスペース(空格)や連続する同一の数字(たとえば、"11" など)も引っ掛かってしまいます。そこで検索結果を絞るためにもう少し細かく条件指定をしてみることにしましょう。

([^  0-9a-zA-Z])\1

これは「全角・半角スペースと0~9、小文字・大文字の a~z 以外の任意の1文字が、2つ連続して出現する個所」という意味で、この条件なら連続するスペース(空格)や連続する同一の数字は引っ掛かりません。この条件で「ファイルから検索」を実行すると以下のような結果が出力されます(抜粋)。もちろん、EmEditor なので、秀丸エディタや KWIC Finder と違い、「諰諰然」「倜倜然」のような Unicode 文字(列)もこれでヒットします。ちなみに「××然」の用例だけを抽出したい場合は、「[^  0-9a-zA-Z]\1然」のように、上の正規表現の末尾に「然」を追加してやるだけでいけます。

C:\e-text\utf8\先秦\諸子\荀子.txt(589):  親親故故庸庸勞勞、仁之殺也。貴貴尊尊賢賢老老長長・義之倫也。行之得其節、禮之序也。仁・愛也、故親。義・也、故行。禮・節也、故成。仁有里、義有門。仁・非其里而處之、非仁也。義、非其門而由之、非義也。推恩而不理、不成仁。遂理而不敢、不成義。審節而不和、不成禮。和而不發、不成樂。故曰、仁義禮樂、其致一也。君子處仁以義、然後仁也。行義以禮、然後義也。制禮反本成末、然後禮也。三者皆通、然後道也。
C:\e-text\utf8\先秦\諸子\荀子.txt(600):  言語之美、穆穆皇皇。朝廷之美、濟濟鎗鎗
C:\e-text\utf8\先秦\諸子\荀子.txt(605):  湯之咸、見夫婦。夫婦之道、不可不正也、君臣父子之本也。咸感也、以高下下、以男下女、柔上而剛下。