0

文字列の先頭にある文字と文字列の改行をキャッチしようとしています

.V/1LBOG\n.F/AV0094/08NOV/SAL/Y\n.E/0134249356001"

私が使用している正規表現は、.V/ と .E/ をキャッチする必要がある上記の文字列からのものです

^.[VE]/*

しかし、それは .V/ を ctach するだけのようです ^ は文字列の開始だけでなく改行を意味すると思ったので、誰でも理由を見ることができますか? しばらくの間この問題を抱えていたので、どんな助けも非常に感謝しています。これが正しい方法でない場合は、別の方法を提案できます。

4

3 に答える 3

0

.V または .E が必要な場合は^.(V|E)/*、 or|演算子を試してみてください^.V/*^.E/*

于 2011-12-10T14:07:32.463 に答える
0

正規表現 101:

^文字列の開始を意味します。そして、あなたはそれを正しく推測しました。文字列の開始は 1 つだけです。

^.[VE]/*

意味 :

文字列の先頭に一致し、その後に (改行以外の) 任意の文字が続き、その後に V または E が続き、その後に 0 から n /(貪欲) が続きます。

おそらく、次のようなものが必要です。

\.[VE].*?(?:\\n|$)

これは、ドットに一致し、その後に V または E が続き、\n文字列の最後までまたは最後まですべてに一致することを意味します。

私が間違っている場合はコメントしてください。

そう.V/1LBOG\n.F/AV0094/08NOV/SAL/Y\n.E/0134249356001"

このように見えますか?

.V/1LBOG
.F/AV0094/08NOV/SAL/Y
.E/0134249356001"

はいの場合、正規表現を少し変更する必要があります。

\.[VE].*

.デフォルトでは改行に一致しないという事実を悪用しています。

于 2011-12-10T14:10:50.460 に答える
0

.正規表現では、リテラルではなく任意の 1 文字に一致します.。リテラルのピリオドに一致させたい場合は、エスケープする必要があります ( \.)。*(ほとんどのシェルがそうであるように) 任意の数の任意の文字に一致しませんが、代わりに、その前に置いたものの 0 個以上のインスタンスに一致します。たとえば、A*リテラルの文字などと一致し、任意の文字列と一致します。AAAAA.*

^行頭を意味します。^\.[VE]/andに一致.V/します.E/(ただし、行頭のみ)。

于 2011-12-10T14:12:34.360 に答える