Regular Expressions
アンカーキャラクター:キャレット(^)
サーチ…
備考
用語
キャレット(^)文字は、次の用語でも参照されます。
- 帽子
- コントロール
- アップロード
- シェブロン
- 曲りアクセント
使用法
正規表現には2つの用途があります。
- 行の開始を示す
- 角括弧(
[^
)の直後に使用すると、許可された文字のセットを無効にします(つまり、[123]
は文字1,2または3が許可されていることを意味します)。[^123]
、2、または3が許可されます。
文字エスケープ
特殊な意味を持たないキャレットを表現するには、その前にバックスラッシュを付けてエスケープする必要があります。つまり\^
。
ラインの始まり
複数行(?m)
修飾子がオフの場合、 ^
は入力文字列の先頭にのみ一致します。
正規表現の場合
^He
次の入力文字列は一致します。
-
Hedgehog\nFirst line\nLast line
-
Help me, please
-
He
次の入力文字列は一致しません 。
-
First line\nHedgehog\nLast line
-
IHedgehog
-
Hedgehog
(白いスペースのため))
複数行(?m)
修飾子をオンにすると 、 ^
すべての行の先頭に一致します。
^He
上記は、 He
始まる行を含む入力文字列と一致します。
改行文字として\n
を考慮すると、次の行は一致します。
-
Hello
-
First line\nHedgehog\nLast line
(2行目のみ) -
My\nText\nIs\nHere
(最後の行のみ)
次の入力文字列は一致しません 。
-
Camden Hells Brewery
-
Helmet
(白いスペースのため))
^
を使って空行をマッチングする
キャレットの別の典型的な使用例は、空行をマッチングすることです(複数行修飾子がオフの場合は空の文字列)。
空白行(複数行オン )にマッチさせるために、行末の位置を表す別のアンカー文字である$
隣に、キャレットが使用されます( Anchor Characters:Dollar($) )。したがって、次の正規表現は空行と一致します。
^$
キャレット文字をエスケープする
文字クラス( 文字クラス )で^
文字を使用する必要がある場合は、クラスの先頭以外に置くか、
[12^3]
または、バックスラッシュを使用して^
をエスケープします。 \
:
[\^123]
キャラクタクラス外のキャレットキャラクタ自体と一致させたい場合は、エスケープする必要があります:
\^
これにより、文字列/行の先頭を表すアンカー文字として^
が解釈されなくなります。
行アンカーの比較開始と文字列アンカーの開始
多くの人が^
は文字列の始まりを意味すると考えていますが、 実際には行の始まりを意味します。文字列アンカーの実際の使用は、 \A
です。
文字列hello\nworld
(またはもっと明確に)
hello
world
\Ah
^h
、 ^w
、 \Ah
という正規表現では一致しますが、 \Aw
では一致しません
マルチライン修飾子
デフォルトでは、キャレット^
メタキャラクターは文字列の最初の文字の前の位置と一致します。
次のパターンに対して適用される文字列 " charsequence "が与えられているとします。/ /^char/
& /^sequence/
、エンジンは次のように一致しようとします:
/^char/
- ^ -
呪文
- c -
c
収穫 - 時間 -
ch
arsequence - a -
cha
rsequence - r -
char
シーケンス
一致が見つかりました
- ^ -
/^sequence/
- ^ -
呪文
- s -
呪文
マッチが見つかりません
- ^ -
文字列に\r?\n
などの行終端文字が含まれていても、同じ動作が適用されます。文字列の先頭の位置だけが一致します。
例えば:
/^/g
┊char\ r \ n
\ r \ n
シーケンス
ただし、すべての行終端文字の後にマッチする必要がある場合は、パターン内で複数行モード( //m
、 (?m)
)を設定する必要があります。そうすることで、キャレットは^
文字列の先頭に位置し、位置の直後に 1行終端に対応し、「各行の先頭に」一致します。
1いくつかのフレーバー(Java、PCRE、...)では、行終端文字が文字列の最後である場合、 ^
は終端文字の後に一致しません。
例えば:
/^/gm
┊char\ r \ n
┊\ r \ n
┊シーケンス
Multiline修飾子をサポートする正規表現エンジンのいくつか:
Pattern pattern = Pattern.compile("(?m)^abc"); Pattern pattern = Pattern.compile("^abc", Pattern.MULTILINE);
var abcRegex = new Regex("(?m)^abc"); var abdRegex = new Regex("^abc", RegexOptions.Multiline)
/(?m)^abc/ /^abc/m
abc_regex = re.compile("(?m)^abc"); abc_regex = re.compile("^abc", re.MULTILINE);