先日のワイルドカードセミナーの参加者の一人が入力された検索式をみて気づいた「ありそうな誤記」を紹介します。
一見うまくいっているように思えるのですが、正しい記述と比較して何が間違っているのか、その影響がどのようになるのかを説明します。
<目次>
このワイルドカードの目的
隅付き括弧の直前の半角スペースと全角スペースを特定すること
実務で使うかどうか分かりませんが、わかりやすくするために単純化してみました。
(検索前)
以下のような隅付き括弧の直前にいくつかのスペースが書かれているとします。
(選択した状態)
[検索と置換]ダイアログボックスを使って、該当箇所を選択しました。
ワイルドカードの検索式の例
正しい記述
半角スペースか全角スペースがいくつかあることを検索式で書くと以下のようになります。
[ ]{1,}【
先頭の角括弧で囲まれた部分には半角スペースと全角スペースが入っています。
角括弧で囲まれた部分は、ここに記載された文字列のうち任意の1つを検索するという意味になります。
半角スペースと全角スペースを探したいだけであれば、2つを並べて書いておけばいいのです。
間違った記述
これを、以下のように書いてしまうとちょっとやりすぎになります。
[ - ]{1,}【
そうです。「半角スペース」+「ハイフン」+「全角スペース」となっています。
この「ハイフン」は範囲を示してしまいます。たとえば、
[0-5]
とすれば、
[012345]
と同じ意味になり、半角数字の0~5のうち任意の1文字という意味になります。
よって、
[ - ]
となっていれば、半角スペースから全角スペースの間にある文字列のうち任意の1文字ということになってしまいます。
[-]で指定される範囲とは?
このときに何が該当するのか?というと、[記号と特殊文字]ダイアログボックスでUnicode表示にした場合に並んでいる文字列が該当します。
半角スペースはここにあります。つまり、先頭です。
半角スペースを選択した状態で[記号と特殊文字]ダイアログボックスを立ち上げると選択した文字列の位置がわかります。
全角スペースは以下の位置にあります。
なので、この半角スペースと全角スペースに挟まれた文字列が全部範囲に入ってしまいます。
上記でいえば、①や②などの丸文字が入ります。読点は全角スペースの右隣にあるので含まれません。
意図しない箇所が選択される例
上に紹介した例では、いずれの検索式の記述でも同じ部分が選択されています。
しかし、隅付き括弧の直前に半角スペースと全角スペース以外の文字列が入った場合には異なる結果になります。以下の例をご覧ください。
[ ]{1,}【
[ - ]{1,}【
では、どうすればいいのか?
自分で作った検索式の場合には間違いを見つけづらいと思います。私も今も予想に反する結果になることがたびたびあります。
なので、ひとまず使い続いながら、どこが該当するのか1つずつ検索して確認してみるなど工夫が必要かもしれません。様々なサンプル文書で検索結果を確認することも勉強になります。
とくに、一括置換をする場合には、間違った箇所を検索してしまうと困るので、置換後の文字列に蛍光ペンを付けるといいと思います。置換した後で確認できるからです。この仕組み化が大切です。
間違いを恐れずに、まずは実行してみることが重要です。そして間違いを見つけやすくする仕組みも同時に準備しておきましょう。