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

EmEditor で正規表現処理(1)

Ver.4 になって置換やマクロも完全に Unicode 対応した EmEditor 4 Profesional。一見、高価なように思えがちですが、学生や教職員が対象のアカデミック ライセンスや、フリーソフト作者やテクニカルライター向けのテクニカル ライセンスなどを活用すれば無料で Profesional 版が利用できます[拙齋記事]。仮に上記ライセンスが適用されない方でも、エディタ派の人なら、まず損はしないだけの充実した機能を備えてます。今回はこの EmEditor を使って、通常の単純検索 / 置換ではできない、中国学向けの正規表現(Regular Expression)用語解説検索 / 置換の方法を紹介します。「正規表現」の意味が分からない方も、是非、試しに一読してみて下さい。

・ まずはじめに..

まずはじめに、EmEditor で正規表現検索 / 置換をするための下準備をします。(この項目で書くことは、すでに EmEditor での検索に慣れてる人には既知のことでしょうから、そういう方は次ぎの項目に飛んで下さい。)メニューバーの中の

[検索(S)]-[ファイルから検索(I)]

をクリックして下さい。以後、このコマンドをよく使いそうな人は、ツールバーの上を右クリックし、[カスタマイズ]を選択して[ファイルから検索]アイコンをツールバーに登録してしまうと良いでしょう。キーボード派の人なら、[ツール]-[すべての設定のプロパティ]の[キーボード]タブを開いて、ショートカットキーを設定すると快適になります。

さて、[ファイルから検索]ダイアログ用語解説(下図)を開いたら、まず[正規表現]チェックボックス用語解説にチェックを入れてください。これで検索するときに正規表現が使えるようになります。あとは必要に応じてファイルの所在などを設定するだけです。もし検索時にエラーが出るようなら、[エンコード]リストボックス用語解説から適切な文字コードを選択して下さい。

EmEditor の[ファイルから検索]ダイアログ中の[正規表現]チェックボックスにチェックを入れ、検索するディレクトリ(=フォルダ)を指定する。

・「謂~曰」(…に謂ひて曰く)の検索

「謂~曰」(~に謂ひて曰く)という言い回しを捜したい場合、ただちに思い浮かぶのは「謂」と「曰」の and 検索でしょう。しかし、and 検索ではただでさえ「謂」や「曰」の用例自体が多い上に、「謂」と「曰」の距離が離れている例まで引っ掛かってしまうため、検索する気力を削がれてしまいます。そこで、まずは以下の正規表現検索を試みて下さい。

謂..曰

こうすると、「謂列子曰」「謂管仲曰」といった例が引っ掛かります。" . " は「任意の1文字」を意味する "メタ文字(もしくはメタキャラクター)" です。メタ文字とは、プログラム言語などで特殊な意味や働きを持たせている文字のことをいいます。「任意の1文字」なので、" . " にマッチする1文字は漢字だろうと数字だろうと空格(スペース)だろうと何でも構いません。とにかく1文字です。この場合は「謂」と「曰」の間に2文字入る例にマッチします。当然、" . " を「謂」と「曰」の間に3つ入れると、「謂子墨子曰」や「謂二三子曰」のような、「謂」と「曰」の間に3文字入る例にマッチするようになります。

少しステップアップして、より適正な用例を過不足なく検索してみましょう。" 謂 . . 曰 " では「謂」と「曰」の間に3字以上入る用例は引っ掛かりませんし、間に何字入るパターンがあるのかを考えながら何度も " . " の数を書き換えて検索するのも面倒です。また先ほどの正規表現では「謂」と「曰」の間に句読点が入ってしまう例もヒットしてしまうため、必ずしも意図通りではない余計な例まで拾われてしまいます。そこで、今度は以下の正規表現を試してみて下さい。

謂[^、。・.,:;「」]*?曰

" [^~] " は、いわゆる not 検索に相当します。つまり " [^ 、。・.,:;「」] " は、" "(頓号 /【日】読点)、""(句号 /【日】句点)、""(間隔号 /【日】中黒)、" "(句号)、" "(逗号)、""(冒号)、""(分号)、"「 」"(引用号 /【日】鉤括弧)、""(問号)、""(嘆号)以外の任意の1文字ということになります。これで「謂」と「曰」の間に句読点が入るケースを除外できます。(※並列を意味する中黒「・」や頓号「、」は、状況に応じて入れたりはずしたりするといいでしょう。ちなみに中国の頓号と日本の読点は意味が異なります。中国では逗号 " ," が日本の読点 " 、" に相当し、中国の頓号 " 、" は日本では中黒 "・" がそれに相当します。)

" * " は「0回以上の繰り返し」を意味するメタ文字。つまり「謂」と「曰」の間に入る文字の数が6字になってもいいし、逆に「謂曰」のようにくっついてしまう(間に1字も入らない)ケースも引っ掛かります。" ? " は「最短一致」を意味するメタ文字で、この場合は「謂」から最も近い「曰」までを検索対象とします。これでほぼ完全に「謂」と「曰」の間が無駄に間延びした例を除外することができます。この正規表現を用いた検索結果をごく一部だけ以下に掲示しておきますので、EmEditor を使われてない方も参考にしてみて下さい。(なお、Unicode 文字列の検索に対応していなくても差し支えなければ、この正規表現検索は "秀丸エディタ" や "サクラエディタ" 、"KWIC Finder" などでも実行可能です。)

C:\e-text\utf8\先秦\諸子\莊子.txt(304): 子送葬、過惠子之墓、顧謂從者曰、「郢人堊慢其鼻端若蠅翼、使匠人斲之。石運斤成風、聽而斲之、盡堊而鼻不傷、郢人立不失容。宋元君聞之、召匠石曰、『嘗試爲寡人爲之。』匠石曰、『臣則嘗能斲之。雖然、臣之質死久矣。』自夫子之也、吾無以爲質矣、吾無與言之矣。」 C:\e-text\utf8\先秦\諸子\莊子.txt(306): 吳王浮於江、登乎狙之山、衆狙見之、恂然棄而走、逃於深蓁。有一狙焉、委蛇搔、見巧乎王。王射之、敏給搏捷矢。王命相者趨射之、狙執死。王顧謂其友顏不曰、「之狙也、伐其巧・恃其便、以敖予、以至此殛也。戒之哉。嗟乎、無以汝色人哉。」顏不疑歸而師董梧、以鋤其色、去樂辭顯、三年而國人稱之。 C:\e-text\utf8\先秦\諸子\莊子.txt(336):謂莊子曰、「子言無用。」莊子曰、「知無用而始可與言用矣。天地非不廣大也、人之所用容足耳、然則廁足而墊之致黄泉、人尚有用乎。」惠子曰、「無用。」莊子曰、「然則無用之爲用也亦明矣。」

このように、この正規表現だと「謂」と「曰」の間が可変長になり(文字数が増減してもよくなり)、長いものでは、たとえば「匡章謂惠子於魏王之前曰」(《呂氏春秋・審應覽・不屈》)のような例もヒットします。