4

いくつかの文字列があるとしましょう:

some50
some51/x
some52/y
some53/z
some510
some511/x
some512/y
some513/z

some文字列が+数値+何かの形式であるかどうかをテストしたいと思います。

^some\d+この要件には、すべての一致を返すパターン : を使用します。

ここで、一部の数値を除外する必要があります。たとえば、一致から 51 と 52 を除外する必要があります。正しい表現は?

私は試しました(私が認める試みよりも推測です):

  • ^some(\d+|(?!(51|52)))
  • ^some((\d+)(?!(51|52)))
  • ^some(\d+)^(?!(51|52)))
  • ^some(\d+)(?!(51|52)))

しかし、期待される結果を返すものはありません。

some50
some53/z
some510
some511/x
some512/y
some513/z

PS: 重要かどうかはわかりませんが、正規表現は PowerShell スクリプト内で使用されます。

[編集] 51x を除外すべきではないことを示すために質問を拡張しました

4

2 に答える 2

4

あなたは否定的な先読みアサーションを探しています。私はPowerShellスクリプトに精通していませんが、perl互換の正規表現ではこれは機能します。

^some(?!(51$|52$))\d+$

これも一致しませんsome510。それが意図されていない場合は、$51とを削除します52

更新:文字列境界から単語境界への変更(文字列の最後)

^some(?!(51\b|52\b))\d+\b
于 2012-09-21T14:01:39.350 に答える
-1

これが1つの方法ですが、おそらく最もエレガントではありません。 ^some([0-46-9]\d*|5([03-9]|\d\d+)|5)

于 2012-09-21T14:01:49.107 に答える