1

[] でカプセル化されたアンダースコアで区切られた 2 つの文字列の組み合わせに一致する正規表現を探しています。両方の文字列が完全に大文字の単語である場合を除き、すべてのインスタンスが一致する必要があります。

私が今まで得たものは次のとおりです。

\[(([A-z](?=[a-z]+))(?!=[a-z]{0,}))[a-zA-Z]+_(([A-z](?![a-z]+))(?!=[a-z]{0,}))[a-zA-Z]+\]

次のような状況以外のすべてに一致する必要があります。

[ONLYCAPS_ONLYCAPSTOO]

前もって感謝します!

言い忘れましたが、文字列には特殊文字と空白文字を含めることもできます。

4

3 に答える 3

2

こうすればいい

(?!\[[A-Z]+_[A-Z]+\])\[[^_]+_[^_]+\]
--------------------- --------------
         |                   |->desired result
         |
         |->won't match further if there's [ONLYCAPS_ONLYCAPSTOO] ahead

(?!pattern)ゼロ幅の先読みです。つまり、チェックするだけで一致しません!

[^_]以外のものに一致します_

于 2013-10-11T11:09:16.583 に答える
2

この状況では、否定先読みを使用する必要があります。次の正規表現が機能します。

\[(?![A-Z]+_[A-Z]+\])[a-zA-Z]+_[a-zA-Z]+\]

別れる:

\[           # Start with '['
   (?!         # See if not followed by
      [A-Z]+     # Upper case letters one or more times
       _         # An underscore
      [A-Z]+     # Upper case letters one or more times
      \]         # Till the ending ']'
   )           # Negative look-ahead ends
   # If negative look-ahead succeeds, perform actual match.
   [a-zA-Z]+   # Match upper or lowercase alphabets one or more times
    _          # An underscore
   [a-zA-Z]+   # Match upper or lowercase alphabets one or more times
\]           # Ending ']'
于 2013-10-11T11:09:25.603 に答える