可能な限り最長の一致に対して数字の文字列を一致させる必要があります。
例えば:
完全な番号: 2389466849
私はに対して一致する必要があります:
23894
また
2389
できるだけ長い一致のみを取得したい場合、どうすればこれを達成できますか? これは、正規表現または他の方法で行うのが最適ですか?
例を挙げてください。
正規表現では、問題の種類を説明できません。問題を解決できる追加機能を備えた正規表現ツールがいくつかあるかもしれませんが、文字通り正規表現で記述された文字列のみを見つけることができるツールを使用したい場合、それは不可能です. あなたの問題には計算が必要です。
部分一致を使用して完全な数を取得する場合は、次を使用します。
# all possible partial matching/non-matching strings
arr=( 23894 2389 2388 238946 )
# convert them into regex
s=$(printf "%s|" ${arr[@]} | sed 's/|$//')
# find longest matching pattern in input
egrep -o "$s" <<< "2389466849"
238946
posix 基本正規表現 (つまりgrep
) では、23894?
またはを使用します23894\|2389
。posix 拡張正規表現 ( grep -E
) の場合:23894|2389
Posix 正規表現は (他のいくつかの種類とは異なり) 常に、可能な限り早い開始点から始まる可能性のセットから最長の一致に一致します。
最も早い開始点ルールは、ターゲットが次の場合を意味します。
23890000023894
一致23894?
は以前の と一致する2389
ため、厳密には最長一致ではありません。文字列内の任意の場所で最長の一致が必要な場合は、少し注意が必要です。