-1

文字列がパターンと一致するかどうかを確認できる正規表現を作成しようとしています-*0001-

文字列の最初の文字または最後の文字のいずれかを a+または aにすることができます-*文字列の先頭 (+またはの後) にはオプションがあり-、その後では特殊文字は許可されません。、、およびオプションの 以外に、少なくとも 1 つの文字が必要+です。-*

正しい一致は

  1. -cccccc
  2. cccccc-
  3. +ccccc
  4. ccccc+
  5. +*cccc
  6. *cccc+

不正確な一致は

  1. -cc*c
  2. *-
  3. +
  4. +-

私がこれまでに持っている正規表現はかなり近いですが、十分に近いわけではありません:

^([\+\-]?)(\*?)([a-z0-9]*)([\+\-]?)(\1\4)$
4

4 に答える 4

1

たぶん、このような簡単なものでしょうか?

正規表現 1: ([+-]\S+)|(\S+[+-])

これは、で始まるか+、で終わる-文字列(またはその両方) に一致します。orが 1 つしかないことをチェックせず、 or自体または空白と一致しません。+-+-+-

これは , , , , , , に一致しますが、一致し-cccません。+cccccc-ccc++ccc+-ccc++++++++++\t\t

最後の文字が+or-の場合、または最初の文字が+orの場合、または-その逆を許可しないようにするには (文字列が+orで開始および終了することはありません-)、次のようなことを行います。

正規表現 2: ([+-]\S*[^+\-\s])|([^+\-\s]\S*[+-])

これは-ccc+or++またはには一致しません+++++が、 には一致し+++++aます。

+クラスの内部または内部に一致しないよう-にするには、次のことを行う必要があります

正規表現 3: ([+-][^+\-\s]+)|([^+\-\s]+[+-])

一致しないもの++++a

編集-:文字クラスでエスケープするのを忘れました。

于 2012-06-20T12:45:07.037 に答える
0

OPは、最初と最後の両方の位置が同じ文字である場合に一致させたいと思います。これは、-または+、たとえば-aaa-、または+aaa+ではありません-aaa+。その場合、これは機能するはずです。

^([-+]).+\1$

[-+]これは、-または+文字(最初は範囲として表示されないように-)、次にいくつかの文字、次に最初のグループに一致します。最初のグループは、角かっこで囲んでいるため、最初の文字です。

例:

$ echo '-aaaa-' | grep -P '^([-+]).+\1$'
-aaaa-
于 2012-06-20T13:09:05.453 に答える
0

クレジットはコビに行くべきですが、何らかの理由で彼は答えを削除しました. 少し編集しました

最終的な答えは

^(?:(?<UOMPrefix>[+-])(?<BCPrefix>\*?)(?<BarCode>\w+)|(?<BCPrefix>\*?)(?<BarCode>\w+)(?<UOMPrefix>[+-])|(?<BCPrefix>\*?)(?<BarCode>\w+))$

これは考慮されます Optional(+-)Optional(*)(characters)Optional(+-)

于 2012-06-20T13:19:23.787 に答える
0

なぜあなたの試みや他の答えがとても複雑なのかわかりません。

これは、タイトルが求めることを行います: ^([+-].*|.*[+-])$

あなたが私たちに言っていないことはもっとありますか?

于 2012-06-20T13:02:08.597 に答える