EDI データ形式用のパーサーを作成しようとしています。これは区切りテキストですが、ファイルの先頭に区切り文字が定義されています。
基本的には、コードの先頭で読み取った値に基づく一連の splits() です。問題は、次の区切り文字を無視する必要があることを示すカスタムの「エスケープ文字」もあります。
たとえば、* が区切り文字で、? はエスケープです、私は次のようなことをしています
use Data::Dumper;
my $delim = "*";
my $escape = "?";
my $edi = "foo*bar*baz*aster?*isk";
my @split = split("\\" . $delim, $edi);
print Dumper(\@split);
最後の要素として「aster*isk」を返す必要があります。
私の最初のアイデアは、split() 関数を呼び出す前に、エスケープ文字とそれに続く文字のすべてのインスタンスを、カスタム マップされた印刷不可能な ASCII シーケンスに置き換えてから、別の正規表現を使用してそれらを正しい値に戻すというものでした。
それは実行可能ですが、ハックのように感じられ、5 つの異なる潜在的な区切り文字すべてに対して実行すると、かなり見苦しくなります。各区切り文字は潜在的に正規表現の特殊文字でもあるため、私自身の正規表現で多くのエスケープが発生します。
おそらく私の split() 呼び出しに特別な正規表現を渡して、これを回避する方法はありますか?