1

次のような入力文字列を取得します。

A     BC Y

または

A     BCY

つまり、最初の 1 文字を 1 つの文字列として解析し、次の 7 文字を別の文字列として解析し、次の 1 文字を別の文字列として解析し、最後の 1 文字を別の文字列として解析する必要があります (これは入力ではオプションです)。つまり、入力行の長さは 9 文字または 10 文字にすることができます。これを解析して 4 つの文字列を取得することになっています。

後でこれらの文字列をデータベースに入れ、さらに処理を行います。

私は次のような正規表現を使用しています

s/(.{1})(.{7})(.{1})(.{1})/

そして、この値を 4 つの変数にコピーします。

しかし、問題は、行の長さが正確に 10 文字の場合 (最後の文字がある場合) にのみ機能することです。

長さが 9 文字 (最後のオプションの文字Yがない) の場合、正規表現は行と一致しないため、解析は行われません。

簡単に言えばregex、最後の1文字を解析用にオプションに変更するにはどうすればよいですか。

前もって感謝します。

PS: 質問は専門家にとって非常に些細なことに聞こえるかもしれませんが....

4

2 に答える 2

1

perlreまたはperlretutのマニュアルページを読めば、ほぼ確実にこれを解決できたはずです。

他の人が指摘したように?、正規表現アトムをオプションとしてマークします。{1}すべてのシーケンスを省略して正規表現を単純化することもできます。

/(.)(.{7})(.)(.)?/
于 2013-10-23T15:12:49.947 に答える
0

?オプションの (0 または 1) 一致に 使用

/(.{1})(.{7})(.{1})(.{1})?/

またはもっと簡潔に

/(.)(.{7})(.)(.)?/
于 2013-10-23T14:59:19.523 に答える