文字列が特定のパターンに一致することを確認しようとしています。
#:XY1:XY2:ABC:::xy::
パーツ#:XY1
は必須であり、その後のフィールドとセパレーターはオプションです。ただし、3番目のフィールドがある場合は、である必要がありますABC
。私はこのようにそれを試しています:
^#:[^:]+:?([^:]+)?:?(ABC)?:?([^:]*:?)*$
ABC
ただし、3番目のフィールドとして正確に存在しない行にも一致します。
文字列が特定のパターンに一致することを確認しようとしています。
#:XY1:XY2:ABC:::xy::
パーツ#:XY1
は必須であり、その後のフィールドとセパレーターはオプションです。ただし、3番目のフィールドがある場合は、である必要がありますABC
。私はこのようにそれを試しています:
^#:[^:]+:?([^:]+)?:?(ABC)?:?([^:]*:?)*$
ABC
ただし、3番目のフィールドとして正確に存在しない行にも一致します。
これを試してください:
^#((((:[^:]+))((:[^:]*))?)|((((:[^:]+))(:[^:]*))((:(ABC)?)(:[^:]*)*)?))$
次のような式を使用できます。
(?x) ^#:[^:]+ (?: :[^:]+ (?: :ABC (?: :[^:]* )* )? )? $
また、これは他のプログラミング構造を使用して行う方が良い(読みやすい)場合があります。Perlの例:
my @l = split /:/, '#:XY1:XY2:ABC:::xy::';
if($l[0] eq '#' && $l[3] eq 'ABC'){
# do stuff
}