Skip to content

Latest commit

 

History

History
47 lines (39 loc) · 3.34 KB

spec.ja.md

File metadata and controls

47 lines (39 loc) · 3.34 KB

(?i:standback) 仕様

README.md

まずはRubyの正規表現を見ましょう

プログラムの構造(文法)

  • プログラム全体は1つのブロックである
  • ブロックは0個以上のコマンドの並びであり、コマンドの間や前後には空白を入れてもよい
    • #コメントのような#で始まる行コメントも入れられる
      • #単体はコメントにならないので注意
  • コマンドは以下のものがある。コマンド名は1文字で、それに続いて0個以上の引数がある。コマンド名と引数の間、引数間、最後の引数の後には/を入れる。
  • 文字列は/, \, %のみエスケープできる(\/, \\, \%)。エスケープのない%は変数展開に使われることもある(後述)。
  • 正規表現はRubyと同じように書ける

コマンド

以下はaに対する操作(後述)である。

コマンド 説明
c/関数名文字列/ 関数呼び出し。引数はなくグローバル変数(後述)で渡す。
d/関数名文字列/ブロック/ 関数定義(未検証)
g/正規表現/置換文字列/ aを全置換(RubyのString#gsub)。replace部分に\1などを書いてもただの1になる。正しくは%1(後述)。
m/正規表現/真ブロック/偽ブロック/ 条件分岐(正規表現がaにマッチするかどうか)
q/ aをエラー出力しプログラムを直ちに異常終了させる(ただしaが空文字列の場合何も出力せず正常終了する)
s/正規表現/置換文字列/ aを置換(String#sub)
t/置換前文字列/置換後文字列/ aを全置換(String#tr)
w/正規表現/ブロック/ aにマッチする間繰り返し(while)

変数

  • aAの2つのグローバルな文字列がある
    • 上のコマンドの最初の文字を大文字にするとAに対する操作になる。ただしブロック引数には影響しない。
      • たとえばQ/Aをエラー出力しプログラムを直ちに異常終了させるのでデバッグに便利
    • 関数呼び出しを大文字Cにすると関数の本体の中でaAが入れ替わる
      • たとえば下のc/\//nana/nAに置換するが、C/\//nAnA/naに置換する
    • グローバル変数の初期値はaが入力全体、Aは空文字列である。プログラム終了時Aが出力される。
  • 正規表現をとるコマンドでは正規表現より右の引数で%2, %&等(RubyのKernel特殊変数の正規表現関連の変数の$を%に変えたもの)を使える
    • ネストする場合は%%2, %%%%%'など%の数で深さを指定する。%\%に変えるとただの%と解釈される。

標準関数

  • ord: a/^-?\d+(\.\d+)?/にマッチする部分文字列 (つまり文字列の先頭にある浮動小数点数。以下、これをnaと呼ぶ) をその文字コードを持つ文字に置換
  • chr: a/^./をその文字コードに置換
  • +: nana+nAに置換
  • /: nana/nAに置換 (-Infinityとかにも置換されうる)

/examples/