0

私は次のように先読み/後ろを使用して境界間のコンテンツを抽出しようとしています:

Filename: myfile.txt
Message: myMessage
Time:...

正規表現を使用して、ファイル名と時刻の間にあるものを抽出したい:

(?<=.txt).*(?=Time)

ただし、改行が取られていないため、機能しません。それに合わせて何を変更できますか?

4

2 に答える 2

4

まず、で脱出するのを忘れまし..txt

/(?<=\.txt).*(?=Time)/

次に、実際には何もキャプチャ(「抽出」)しません。

/(?<=\.txt)(.*)(?=Time)/

.次に、改行以外のすべての文字ではなく、すべての文字に一致する必要があるPerlに指示する必要があります。

/(?<=\.txt)(.*)(?=Time)/s

そして、あなたは行き​​ます。行の最初から最後まで一致させるだけで、少し改善できます。

/(?<=\.txt\n)(.*)^(?=Time)/sm

ところで、この場合、ルックアラウンドを使用する理由はないようです。

于 2013-02-20T09:39:27.217 に答える
0

改行を一致させるには、.を有効にする必要があります/s。これにより、文字列全体が1行として扱われます。

さらに、おそらくこれにルックアラウンドを使用するべきではありません。通常、これらは重複する一致を取得する場合にのみ使用する必要があります。単に試合の一部を取得するために使用すると、予期しない結果が生じる可能性があります。

一致の一部を取得する標準的な方法は、キャプチャサブグループを使用することです。

if (/\.txt(.*?)Time/s)
{
   print "The between portion is:\n$1";
}
于 2013-02-20T09:38:52.000 に答える