^
の利用方法はこちらの記事を参照してください。正規表現で特定のパターンを除外したパターンで一致する式を紹介します。
正規表現で全体のパターンの中で除外したいパターンを除いた一部のパターンに一致させたい場合があります。
単体の文字の場合は ^ を利用しますが、パターンを否定したい場合には、「否定先読み」を利用すると実装できます。
(?!パターン)
?!
を記述します。
通常は、ブロックの前に式がおかれるため、次の形式となります。
パターン(?!パターン)
(?<!...)
ブロックの後ろに式があり、否定先読みのパターンに一致しないが、後に続く式に一致した場合に一致したと判定されます。"PenguinBook"以外の"Penguin*" に一致させたいです。この場合、以下の正規表現式を利用します。
Penguin(?!Book)
次の結果になります。
文字列 | マッチするか |
---|---|
PenguinArt | 〇 |
PenguinCookie | 〇 |
PenguinBook | × |
PenguinJump | 〇 |
DuckArt | × |
DuckBook | × |
CookPenguinArt | 〇 |
CookPenguinBook | × |
置換の場合は、否定先読みのブロック部分はマッチ範囲ととなりません。 置換文字列を"Hawk"とした場合、次の結果になります。
文字列 | マッチするか | 置換後の文字列 |
---|---|---|
PenguinArt | 〇 | HawkArt |
PenguinCookie | 〇 | HawkCookie |
PenguinBook | × | PenguinBook |
PenguinJump | 〇 | HawkJump |
DuckArt | × | DuckArt |
DuckBook | × | DuckBook |
CookPenguinArt | 〇 | CookHawkArt |
CookPenguinBook | × | CookPenguinBook |
&#x(16進数);
以外の &
にマッチさせたいです。この場合、以下の正規表現式を利用します。&(?!#x[0-9a-fA-F]*;)
置換文字列を"&"とした場合、次の結果になります。
文字列 | マッチするか | 置換後の文字列 | 補足 |
---|---|---|---|
J | × | J | |
⽈ | × | ⽈ | &#x2F48; |
&#xZZZ; | 〇 | &#xZZZ; | |
ģ | 〇 | &#x123 | 末尾のセミコロンがないためマッチする |
Penguin&Docuk | 〇 | Penguin&Docuk | |
&Opt | 〇 | &Opt | |
#AA09; | × | #AA09; |
&#x(16進数);
&#X(16進数);
&#(10進数);
を除く &
にマッチするパターンは以下の式になります。
&(?!#((x|X)[0-9a-fA-F]*;|[0-9]*;))