0

文字列が特定のパターンに一致することを確認しようとしています。

#:XY1:XY2:ABC:::xy::

パーツ#:XY1は必須であり、その後のフィールドとセパレーターはオプションです。ただし、3番目のフィールドがある場合は、である必要がありますABC。私はこのようにそれを試しています:

^#:[^:]+:?([^:]+)?:?(ABC)?:?([^:]*:?)*$

ABCただし、3番目のフィールドとして正確に存在しない行にも一致します。

4

2 に答える 2

3

これを試してください:

^#((((:[^:]+))((:[^:]*))?)|((((:[^:]+))(:[^:]*))((:(ABC)?)(:[^:]*)*)?))$
于 2012-06-04T21:00:57.647 に答える
0

次のような式を使用できます。

(?x) ^#:[^:]+  (?: :[^:]+  (?: :ABC  (?: :[^:]* )*  )?  )? $

また、これは他のプログラミング構造を使用して行う方が良い(読みやすい)場合があります。Perlの例:

my @l = split /:/, '#:XY1:XY2:ABC:::xy::';
if($l[0] eq '#' && $l[3] eq 'ABC'){
    # do stuff
}
于 2012-06-01T09:31:50.760 に答える