すべてを特定の文字セットまたはEOLに一致させるにはどうすればよいですか?
[=]+.*?[()|$]
一致:==test)
一致していません:==test
2 番目のステートメントで行末の正規表現アンカー$
が考慮されないのはなぜですか?
行末は実際には文字ではないため、文字クラスでは機能しません。これはゼロ幅のアサーションです (文字列の現在の位置で条件をテストしますが、実際には文字を消費しません)。
でテストし(?:otherstuffhere|$)
ます。
注: 文字クラスと一致するサブグループを混同しているようです。文字クラス[...]
は、括弧内の任意の 1 文字に一致します。、、または[a|bc]
のいずれかに一致します。一致するサブグループは、複数の式を OR したいものです。キャプチャと一致するサブグループです。キャプチャなしの一致するサブグループです。a
|
b
c
(...)
(?:...)
の一致動作は$
、設定に基づいて複数行の文字列で異なる場合があることに注意してください。各行の末尾に一致するか、文字列の末尾のみに一致する可能性があります。
\z
使用する設定に関係なく、常に文字列の末尾でのみ一致します。\Z
文字列の最後、または最後の改行の直前のいずれかに一致します。