0

可能な限り最長の一致に対して数字の文字列を一致させる必要があります。

例えば:

完全な番号: 2389466849

私はに対して一致する必要があります:

23894

また

2389

できるだけ長い一致のみを取得したい場合、どうすればこれを達成できますか? これは、正規表現または他の方法で行うのが最適ですか?

例を挙げてください。

4

4 に答える 4

0

正規表現では、問題の種類を説明できません。問題を解決できる追加機能を備えた正規表現ツールがいくつかあるかもしれませんが、文字通り正規表現で記述された文字列のみを見つけることができるツールを使用したい場合、それは不可能です. あなたの問題には計算が必要です。

于 2013-10-08T17:51:13.720 に答える
0

部分一致を使用して完全な数を取得する場合は、次を使用します。

# 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
于 2013-10-08T17:47:21.450 に答える
0

posix 基本正規表現 (つまりgrep) では、23894?またはを使用します23894\|2389。posix 拡張正規表現 ( grep -E) の場合:23894|2389

Posix 正規表現は (他のいくつかの種類とは異なり) 常に、可能な限り早い開始点から始まる可能性のセットから最長の一致に一致します。

最も早い開始点ルールは、ターゲットが次の場合を意味します。

23890000023894

一致23894?は以前の と一致する2389ため、厳密には最長一致ではありません。文字列内の任意の場所で最長の一致が必要な場合は、少し注意が必要です。

于 2013-10-08T17:57:38.793 に答える