「最長一致」と「最短一致」は、正規表現やネットワークルーティングにおけるマッチングの方法で、最長一致は可能な限り長い文字列や多くの情報をマッチさせる一方、最短一致は可能な限り短い文字列や少ない情報をマッチさせます。正規表現では、量指定子の後に`?を追加すると最短一致になり、
*や
+`などの標準的な量指定子は最長一致として振る舞います。
正規表現での説明
- 最長一致(Greedy Matching):量指定子(
*
,+
, `{n,m}`など)が、可能な限り多くの文字とマッチしようとする動作です。- 例:テキストが「abcabc」でパターンが
a.*c
の場合、最長一致ではabcabc
全体にマッチします。
- 例:テキストが「abcabc」でパターンが
- 最短一致(Lazy Matching):量指定子にさらに`?`(疑問符)を追加することで、可能な限り少ない文字とマッチしようとする動作です。
- 例:テキストが「abcabc」でパターンが
a.*?c
の場合、最短一致では最初に見つかったabc
にのみマッチします。 - 利用法:通常の量指定子は最長一致ですが、量指定子の後に`?`を付けることで最短一致に変更できます。
- 例:テキストが「abcabc」でパターンが
ネットワークルーティングでの説明
- 最長一致検索(Longest Match Search):ルーターがIPパケットをルーティングする際、宛先IPアドレスに最も多く、かつ正確に一致するルート情報を検索する方法です。
- 例:宛先IPアドレスが
192.168.1.10
で、ルート情報に192.168.1.0/24
と192.168.0.0/16
がある場合、より多くのビットが一致する192.168.1.0/24
が最長一致として選択されます。
- 例:宛先IPアドレスが
まとめ
- 正規表現:パターンとマッチする部分の長さを調整する方法です。
- ネットワークルーティング:どのルート情報が最も適切かを判断するためのルールです。
コメント