0

次のようなテキストが与えられた場合:

body = 

yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada 
< via mobile device > 

Yada Yada <xxxxx@xxxxx.com> wrote:

yada yada yada yada yada yada yada yada yada 

2番目の段落に一致させたいので、次のようにしています:

body = body.split(/.* <xxxxx@xxxxx.com> wrote: .*/m).first

しかし、それはRubyではありますが、Rubyでは一致しません。理由はありますか?ありがとう

4

2 に答える 2

1

この線

Yada Yada <xxxxx@xxxxx.com> wrote:

スペースではなく、改行で終わります。したがって、正規表現は次のようになります。

/.* <xxxxx@xxxxx.com> wrote:\n.*/m

注意: Windows システムと、HTML などの一部のプロトコルでは、異なる改行エンコーディングを使用できます。互換性を確保したい場合は、まず入力を unix 改行エンコーディングに変換してから、データ抽出を行ってください。これには私の改行宝石を使用できます。

于 2011-03-05T05:05:06.183 に答える
1

代わりにこれを試してください:

body = body.split(/.*<xxxxx@xxxxx.com> wrote:.*/).first

最初のスペースの後のスペース.*は役に立たず、(@aef が指摘したように) 2 番目 .*の前のスペースは誤りでした (おそらく、ルビュラー テストにスペースがあったのでしょう)。

m修飾子も削除したことに注意してください。そうでなければ、正規表現は文字列全体に一致し、結果として空の配列になります。これが、Ruby が複数行モードと呼んでいるものです (そして、他のすべての人は単一行モードまたはドットオールモードと呼んでいます): は改行を含む.すべてのものに一致します。

編集:ideone.comでご覧ください

于 2011-03-05T05:18:22.253 に答える