2017-06-07 4 views
1

私は特にRubyを使用していますが、私は好奇心が強いです...少なくとも3桁の10進数にマッチさせようとしています。ここで負帰還の代わりに?

は正規表現です:/(\.\d{5,})/

否定後読みを使用しない、それがA)スペースやタブや改行、またはBのどちらかを、以下の場合はどのように私はこれだけ試合になるだろう)文字列の先頭のですか?

+0

なぜあなたは否定的な視線を避けようとしていますか?あなたは避ける必要がある他の構造もありますか? – ruakh

+0

この場合、javascriptは否定的なlookbehindを許可しません。 – Max

+0

しかし、あなたはRubyを使っていると言っています。 JavaScriptの正規表現が必要な場合は、Rubyの正規表現ではなく、JavaScriptの正規表現に欠けている特定の機能を回避するRubyの正規表現ではなく、それを求めてください。 – ruakh

答えて

1

まず、見た目のヒントを使ってどのように行うのかを考えてみましょう。

(?<=^|\s)(\.\d{5,}) 

我々は、単に通常のキャプチャグループにその後読みを変更することができます:私たちはキャプチャする行の先頭、または空白になる前に その後、我々はちょうどかどうかを確認します。
これは先行する空白もキャプチャされることを意味します。しかし、置き換えでは、それを保持したい場合は、そのキャプチャを使用することができます。報告された試合の開始点をリセットします:PCRE正規表現エンジンで

(^|\s)(\.\d{5,}) 

我々は\ K K \

を持っています。以前に 消費の文字はもはや

だから、\ Kを正規表現で、前のスペースが一致

(?:^|\s)\K(\.\d{5,}) 

テストには含まれていないことを利用して決勝戦には含まれていませんhere

ただし、キャプチャグループを持つ正規表現にscanを使用するとしますか?それは、キャプチャグループだけを出力するように見えますが、非キャプチャグループやキャプチャグループにないものは出力されないようです。たとえば
:あなたはスキャンを使用する場合

m = '.12345 .123456 NOT.1234567'.scan(/(?:^|\s)(\.\d{5,})/) 
=> [[".12345"], [".123456"]] 

m = 'ab123cd'.scan(/[a-z]+(\d+)(?:[a-z]+)/) 
=> [["123"]] 

だから、前後参照を使用する必要はありません。