0

文字列内のスラッシュとそれに続く数字を正しくキャプチャする正規表現があります。正規表現のキャプチャグループ部分は次のようになります。

\(\d)+\\??

(疑問符までのスラッシュの後のいくつかの数字)そして、このキャプチャグループの前後の正規表現にはさらに多くのものがあります。ここで、キャプチャグループにオプションの特定のプレフィックス(「abc_」と呼びます)も含めたいと思います。

  • キャプチャされたグループに含めるには、プレフィックス全体(4文字すべて)が存在する必要があります
  • プレフィックスが存在しない場合でも、キャプチャグループの数字部分はキャプチャされます
  • プレフィックスが部分的に存在するか、他のプレフィックスが存在する場合、文字列は正規表現と一致しません。

いくつかの例:

abc_12345  is captured
12345      is captured
ab_12345   fails to match the regex
abc_       fails to match the regex
abcd_      fails to match the regex

これを作成するにはどうすればよいですか?

4

2 に答える 2

3

私があなたを正しく理解しているなら、あなたはこれが欲しいです:

((?:abc_)?\\d+)[?]?

?:演算子は、グループを非キャッチグループに変換します。部分接頭辞のある部分がわかりません。正規表現の前にコンテンツを許可する場合、特定のオプションのプレフィックスを拒否することはできません。プレフィックスを拒否するには、パターンの前に空白などの明確な区切り文字を付ける必要があります。

于 2012-10-27T16:55:49.913 に答える
2

あなたの正規表現は、あなたがすでに説明したケースでは機能していないようです。完全な数字ではなく、1桁のみをキャプチャします。また、あなたの脱出は一貫していません。

ただし、これは意図したことを実行する必要があります。

((?:abc_)?\\d+)\\??

別のプレフィックスを一致させてはならないという最後の要件は、正規表現の前の部分を使用する場合にのみ答えることができます。(たとえば、このキャプチャグループの前\w+にある場合、任意のプレフィックスが一致しますが、完全で正しいプレフィックスのみがキャプチャされます)

于 2012-10-27T16:58:27.617 に答える