2011-08-25 16 views

答えて

0

左から始めて、エスケープされた(つまり\A)文字を探します。残りは通常の文字です。 \Aは、入力の開始を意味します。したがって、To:は入力の最初で一致する必要があります。私は:が何のためにもエスケープされていると思う。 \sは、すべてのスペース(タブ、スペース、改行など)の文字グループで、その後に続く+は、1つ以上のスペース文字が必要であることを意味します。その後、グループ内の残りの行をすべてキャプチャします(()とマークされています)。

入力

To: [email protected] 

た場合キャプチャグループは、マルチライン正規表現で"[email protected]"

+1

'\ A'は'^'と同じではありません。 'm'修飾子を使用すると一度だけ一致します... –

+0

@Linusは指摘のおかげで – progo

2

\Aは、幅がゼロのアサーションであり、「文字列の先頭にのみ一致」を意味します。

正規表現は次のようになります。 "To:"で始まり1つ以上の空白(\s)で始まる行には、残りの行((.*))をキャプチャします。

0

入力の冒頭でTo:と一致し、その後に少なくとも1つの空白が続き、任意の数の文字がグループとして続きます。

4

\Aを含むであろうが、文字列の先頭に一致する(と\Zは、文字列の終わりであり、一方^/$は、文字列の開始/終了または行の開始/終了と一致します)。一行の変種では、区別がないので、文字列/行の開始と終了には^$を使用するだけです。

Toはリテラルで、\:はエスケープ:です。

\sは、空白を意味し、+は、前述の「文字」(この場合は空白)の1つ以上を意味します。

()はキャプチャグループです。ここのすべてが使用できる「レジスタ」に格納されます。したがって、これは抽出される肉です。

.*は、改行文字以外の任意の改行文字.を意味し、0回以上*を意味します。

だから、何この正規表現がどうなることのような文字列処理です:

To: paxdiablo 
Re: you are so cool! 

とテキストpaxdiabloを返します。自分でこれをうまくする方法を学習する方法については

Perl regex tutorial(a)のは良いスタートで、その後、練習、練習、


(a)の :-)練習どの正規表現の実装を使用しているのかは実際には述べていませんが、現代のものはPerlに非常に似ています。あなたの特定の味のための特定のチュートリアルを見つけることができれば、それは明らかに良いでしょう。

1

まず、の文字クラスと量指定子が異なるかどうかを知る必要があります。文字クラスは、例えば正規表現のバックスラッシュ接頭文字、\Aです。数量子は、例えば+です。例えば、this oneのように、インターネット上にいくつかの参考文献があります。

我々は左から右へ行くことによって何が起こるかを見ることができる、という使い方:

  • \Aは、文字列の先頭にマッチします。 「:」
  • To
  • は、テキスト「へ」は文字通り
  • \:はエスケープと一致したので、それは「ちょうどコロン」
  • \s試合空白(スペース、タブなど)
  • を、それは特別な意味だ失うとなり、 +ので\s+
  • ()は、後で使用するために保存される括弧内マッチしたキャプチャグループ、何でもある1つ以上のスペースを意味し、以前のクラスを1回以上一致することを意味し
  • .
  • *+似ていますが、0回以上は、そう.*は、正規表現が」で始まる文字列にマッチします一緒にそれを取る任意の文字

の任意の数を意味する「任意の文字」を意味します。 "、少なくとも1つのスペース、それが保存されるものなどが含まれます。したがって、文字列 "To:JaneKealum"では、 "JaneKealum"を抽出することができます。

+1

'+'は修飾子ではなく、*限定子*です。修飾子は、式の後ろに 'i'、' g'などのように置くフラグです。 –

+0

これは真実であり、用語を混同しています。私はそれを修正します – carlpett

0

最初と末尾の/文字は正規表現を区切ります。

\は、次の文字を特別に扱うか、通常は特別な意味を持つ場合はリテラルとして扱うことを意味します。

\Aは、文字列の先頭にのみ一致することを意味します。 ':'

To手段は

\:手段がリテラルに一致する "を" リテラルと一致します。コロンは通常はリテラルであり、特別な意味はありません。

\sは、空白文字と一致することを意味します。

+は、できるだけ多くのそれは続くものの少なくとも一つの一致を意味するので、\s+は試合一つ以上の空白文字を意味します。

(および)は、エクスプレッションエバリュエーターによってキャプチャされて返される文字のグループを定義します。

最後に.は任意の文字に一致し、*は可能な限り一致しますがゼロになることを意味します。したがって、(.*)はすべての文字を入力文字列の末尾にキャプチャします。

したがって、パターンは "To:"を開始する文字列と一致し、最初に続く非空白文字の後に続くすべての文字を取得します。

実際にこれらのことを理解する唯一の方法は、一度に1ビットずつ調べて、各コンポーネントの意味を確認することです。

関連する問題