8

次の正規表現を検討してください。

/xyz^abc/
/xyz$abc/

これらは何と一致しますか?

そんなこと知ってる

  • キャレット ( ^) を正規表現の先頭で使用すると、行の先頭と一致します
  • 正規表現の最後にドル記号 ( $) を使用すると、行末に一致します
  • キャレット ( ^) を文字クラスの最初の文字として使用すると、クラスを否定します

指定された正規表現は何にも一致しないと思いますが、よくわかりません。

4

3 に答える 3

5

それらは何にも一致しません。でも:

/(xyz$|^xyz)/

これは、xyz で開始または終了する任意の行に一致します。

アップデート:

Andy G は、複数行モードが正規表現文字列に一致するものを見つける可能性があると指摘しています。ただし、これは、実装が中間文字列アンカー マッチングをサポートするように構成されている場合にのみ適用されます。

これは、Regular-Expressions.info (正規表現を学習および理解するための私のお気に入りの場所) からのものです。

1 行目\n2 行目 (\n は改行を示します) のように、複数の行で構成される文字列がある場合は、文字列全体ではなく行で作業することが望ましい場合がよくあります。したがって、このチュートリアルで説明するすべての正規表現エンジンには、両方のアンカーの意味を拡張するオプションがあります。^ は、文字列の先頭 (上記の文字列の f の前) と各改行の後 (\n と s の間) で一致します。同様に、$ は引き続き文字列の末尾 (最後の e の後) と、すべての改行の前 (e と \n の間) で一致します。

EditPad Pro や GNU Emacs などのテキスト エディター、および PowerGREP などの正規表現ツールでは、キャレットとドルは各行の最初と最後で常に一致します。これらのアプリケーションは、短い文字列ではなくファイル全体を操作するように設計されているため、これは理にかなっています。

この Web サイト で説明されているすべてのプログラミング言語とライブラリでは、Ruby を除き、この拡張機能を明示的に有効にする必要があります。伝統的に「マルチラインモード」と呼ばれています。Perl では、m/^regex$/m; のように、正規表現コードの後に​​ m を追加してこれを行います。.NET では、Regex.Match("string", "regex", RegexOptions.Multiline) などで RegexOptions.Multiline を指定すると、改行の前後でアンカーが一致します。

于 2013-07-26T19:49:18.537 に答える
0

Perl では、$文字列変数を正規表現に補間するためにも使用されます。

my $abc = 'pqr';
my $result = ('xyzpqr' =~ /xyz$abc/);   # $result is now true
于 2013-07-26T21:38:13.543 に答える