2016-09-08 7 views
1

入力文字列が長すぎるか、新しい行があると思います。正規表現の遡及的バックトラッキングをスキップする方法

正規表現ではどうすればよいですか?

/^.+ (\S+) (\S+) (\S+) #{target} (\S+) (\S+) (\S+) .+$/ 

編集:例(より大きい)の入力において

Nソフトウェアコールスタックポインタが結合したスタックを超えた場合、スタックオーバーフローが発生します。コールスタックは、限られた量のアドレス空間で構成され、多くの場合、プログラムのstartで決定されます。コールスタックのサイズは、プログラミング言語、マシンアーキテクチャ、マルチスレッド、使用可能なメモリの量など、多くの要因によって異なります。 (左)と「プログラムの」「で決定」:

私はターゲットを想定したい番組である場合

そこで抽出された単語の前後3つの単語と3つの単語を抽出するを開始(右)

EDIT2:

@DenysSéguretコメント致命的なバックトラックを回避した後。正規表現は、Rubyでこのように構築されています。

regex ="" 
regex += "(\\S+) " * numLeft 
regex += " #{target}" 
regex += " (\\S+)" * numRight 

pattern = Regexp.new(regex, Regexp::IGNORECASE) 
matches = pattern.match(input) 
+2

それはちょっとあなたが達成したい何をすべきかに依存します。 – mudasobwa

+1

入力/出力の例がありますか? –

+0

申し訳ありません私の質問を編集 – Vas

答えて

0
▶ target = 'start' 
▶ input[/(\w+\s+){3}#{target}(\s+\w+){3}/] 
#⇒ "determined at the start of the program" 
関連する問題