サーチ…


改行文字( "\ n")とドット(。)が一致しないのはなぜですか?

.*正規表現では基本的に "入力の終わりまですべてをキャッチする"という意味です。

ですから、 hello worldような単純な文字列の場合、 .*は完全に動作します。しかし、例えばファイル内の行を表す文字列があれば、これらの行はUnixライクなシステムでは\n (改行)、on-likeシステムでは\r\n (改行と改行)などの行区切りで区切られます。 Windows。

デフォルトでは、ほとんどの正規表現エンジンでは、 .改行文字と一致しないので、各論理行の最後で一致が停止します。あなたが欲しいならば.改行を含む実際のすべてと一致させるには、正規表現のエンジンで「ドットマッチオール」モードを有効にする必要があります(たとえば、Pythonではre.DOTALLフラグ、PCREでは/sを追加します)。

なぜ正規表現はいくつかのかっこ/括弧をスキップして後で一致させるのでしょうか?

この例を考えてみましょう。

彼はカフェ「ドストエフスキー」に行って、「おはよう」と言った。

ここでは2つの引用符があります。正規表現が"Dostoevski" "Good evening." "Dostoevski"一致するように、両方を一致させたいと仮定しましょう"Good evening."

最初は、単純にしておきたいと思うかもしれません。

".*"  # matches a quote, then any characters until the next quote

しかし、それは動作しません:それは、最初の見積もりから一致する"Dostoevski"とで終了引用符まで "Good evening." 、を含むand said:部分。 Regex101デモ

なぜそれが起こったのですか?

これは、遭遇した場合、正規表現エンジンので起こる.*非常に最後まで入力のすべてを「食べます」。その後、それが最終的に一致する必要が"だから、それは『』最初までマッチしたテキストを手放す、試合終了からバックオフを"発見された-そしてそれは、当然のことながら、最後である"試合で"Good evening."の終わりに。

これを防止し、最初の引用符と正確に一致させるにはどうすればよいですか?

使用する[^"]*これは、すべての入力を食べていません。 -最初まで" 、必要に応じて同じように。 Regex101デモ



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow