【ワイルドカード】{1,}と@の違い

以前からワイルドカードの記述で {1,} と @ に違いを認識しながら、明確にその差を理解していませんでした。ちょうどSNSで話題になったため、調べてみましたので、その結果を以下にまとめておきます。

{1,} でダメで @ ならうまく行くケース

例えば、英単語のing形を検索してヒットさせるワイルドカードを考えるとき、以下のような記述を思い付くと思います。

[A-Za-z]{1,}ing

しかし、これではまったくヒットしません。WildLight辞書ライブラリーにある「WLDIC_ECHK_簡易技術英文チェック.txt」で、これを検索するワイルドカードの記述がありますが、以下のように記述します。

[A-Za-z]@ing

そもそも、{,}と@の意味は、ワードの以下の説明から理解しています。

スクリーンショット 2019-05-04 10.50.12

差が良く分からないですよね。{1,} と @ が同じ動きをするという解釈自体が間違っているのかもしれません。

{1,} と @ による検索の動きがどう違うのかを実際にMicrosoft Wordで見てみました。
以下の英文をサンプルにして、{1,} と @ で検索の違いを見てみます。

スクリーンショット 2019-05-04 10.12.111

ヒット数の違いに着目してみます。

{1,} 

Inkedスクリーンショット 2019-05-04 10.13.34_LI

27件がヒットしています。

@

Inkedスクリーンショット 2019-05-04 10.14.04_LI

155件がヒットしています。

実は、27件というのは単語数と同じ、155件は文字数と同じです(カンマ、コンマを含まず)。

スクリーンショット 2019-05-04 10.11.35

どうも @ は1文字ずつヒットするようです。実際にどのような検索範囲になるのかを見てみると、以下のようになります。

{1,} 

スクリーンショット 2019-05-04 10.15.11

@

スクリーンショット 2019-05-04 10.14.36

やはり、前者は単語単位、後者は文字単位でヒットしていることが分かります。

さて、元に戻って、 {1,} ではダメで @ ならうまく行く理由を知りたいのですが、例として上記サンプル英文の「example」を利用して検索してみます。

[A-Za-z]{1,}ple

もちろん、これでは、まったくヒットしません。これを以下のように変えてみたらヒットしました。

[A-Za-z]{1,4}ple

これを「[A-Za-z]{1,3}ple」にすれば「xample」、「[A-Za-z]{1,2}ple」にすれば「ample」、「[A-Za-z]{1}ple」にすれば「mple」がヒットしますが、次の記述だとヒットしなくなります。

[A-Za-z]{1,5}ple

{1,5}の5を4より大きな数字にすると、まったくヒットしなくなります。これは{n, m}のmの数字に影響を受けていることになります。pleの前にm個分の文字が存在しないとヒットしないということのようで、{1,}では無限大の文字数ということになり、何もヒットしないのでしょう。

ところが ple を半角スペースにすると、「[A-Za-z]{1,} 」でも文字数に関係なくヒットするのです。もしかすると{1,}の後の文字数の問題かと「[A-Za-z]{1,}e」を試しましたが、まったくヒットしません。

ん~、良く分かりません。
誰か、この辺りを説明できる方、教えてくださいm(_ _)m

==== < 2019/05/04 17時追記> ====
早速、SNSで反応をいただきました。

{1,}は、先行するパターンがマッチする範囲で一番長い部分で一致し (最長一致)、@は、全体のパターンがマッチする一番短い部分で一致 します(最短一致)

ということで、検索挙動の違いは、この説明通りですね。

また、「[A-Za-z]{1,}ple」の場合、「example」まで最長で一致し、その後に「ple」を探すため、マッチしないという現象になるようです。

情報をくださった方、ありがとうございました。

広告

投稿者: Terry Saito

二足の草鞋を履く実務翻訳者です。 詳細は、以下のURLよりどうぞ。 https://terrysaito.com/about/

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中