私はJamesの答えにいくつかの具体的な例を加えたいと思います。私は正規表現に基づいてテキストのセクションを引き出すためにこの演算子を使用しました。
Net :: SSHを使用してリモートサーバー上でコマンドを実行するツールを作成しました。この特定のサーバーは、セッションがログインセッションであったかどうかに関係なく、MOTDを印刷する厄介な習慣を持っていました。これにより、コマンドを実行して出力を取得したときに、多くのゴミが戻ってきました。私はサーバー設定で多くの揺れがなかったので、区切り文字を印刷してプログラムを実行し、別の区切り文字を印刷した小さなスクリプトを作成しました。出力は次のようになりました。
Welcome to Server X!
+----------------------------------------------------------------------+
| Use of this server is restricted to authorized users only. User |
| activity may be monitored and disclosed to law enforcement personnel |
| if any possible criminal activity is detected. |
+----------------------------------------------------------------------+
----------------------------------------------
Setting up environment for user Adam.
----------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>
Program Output
<<<<<<<<<<<<<<<<<<<<<<<<<
フリップフロップ演算子は、必要な出力を持つコードのセクションだけを抜き出すための便利なショートカットでした。私はマッチを開始するために25以上の ">"と一致する正規表現を使用し、一致を終了するためには25未満の "<"を使用しました。私が見てきた
output.each { |line| puts line if line[/^>{25}/] .. line[/^<{25}/] }
出力
>>>>>>>>>>>>>>>>>>>>>>>>>
Program Output
<<<<<<<<<<<<<<<<<<<<<<<<<
ほとんどの例では、正規表現に基づいてファイルや配列のうち、データの塊を引っ張っ関与しています。 gitのマージの競合、従来のフラットファイルシステム(ファイルに書き込まれた構造体など)からの特定のレコード、ログファイルを引き出すことがいくつかの例です。
基本的には、個々の行の内容ではなく、開始と終了のデータに基づいてセクションを取り出す必要があるときはいつでも。単純な正規表現だけではなく、パーザを書くより複雑ではありません。
-1:未テストコード。これは何だと思いますか? '$ _ =〜〜/ third /)..($ _ =〜/ five /)'(あなたのコードではないことは分かっていますが、廃止された機能を使用するコードを拡散し続ける必要はありません)。 – rampion
これは実際にどのように使用されますか?ファイルから3行目から5行目までを印刷する必要がありますか(コーディングに値する十分な時間)? – kajaco
約3と5を忘れてしまいます。開始タグと終了タグで区切られたファイルのセクションを抽出することです。なぜそれが現実の世界の例であるのが良いかを知りたがっていれば幸いです。今度は、同等の非フリップフロップバージョンには、状態の変数を追加するif文が必要になります。 – inger