0

特定の文字が満たされるまで部分文字列をキャッチしようとしている長い文字列があります。次の文字列があり、最初のアンパサンドまでテキストを取得したいとします。

abc.8965.aghtj&hgjkiyu5.8jfhsdj

アンパサンドの前にあるものを抽出したいので: abc.8965.aghtj W はこれでうまくいくと思いました:

grep'^.*&{1}'

私はそれを次のように翻訳します

^ start of string
.* match whatever chars
&{1} until the first ampersand is matched

何かアドバイス?これには数週間かかると思います

4

2 に答える 2

2

{1}最初の出現と一致しません。代わりに、「直前のパターン/文字の 1 つに正確に一致する」ことを意味します。これは、単に文字に一致する ( &{3}would match &&&) と同じです。

の最初の出現を照合するには&、次を使用する必要があります.*?

grep'^.*?&'

通常、.*貪欲です。つまり、可能な限り一致します。これは、パターンが最初のアンパサンドではなく 最後のアンパサンドに一致することを意味します。.*?は貪欲でないバージョンで、パターンを満たしながら一致をできるだけ少なくします。

更新:その構文は grep でサポートされていない可能性があります。別のオプションを次に示します。

'^[^&]*&'

最初のアンパサンドまで、アンパサンド以外のすべてに一致します。

また、grep ( ) で拡張正規表現を有効にする必要がある場合もあります-E

于 2013-03-04T13:42:18.427 に答える