職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

マッチした文字列の前後の文字列を取得($`、$')

2021年10月29日 | Ruby3.0.1
マッチした文字列の前後の文字列を取得($`、$')


【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

【変数「$'」】
正規表現がマッチした時に、変数「$&」にはマッチした部分文字列が代入されますが、対象の文字列の中でマッチした部分よりも前の文字列が特別な変数「$`」に代入され、後の文字列が特別な変数「$'」に代入されます。

$`
$'

正規表現オブジェクト「/On/」に対して文字列「RubyOnRails」をマッチさせた場合、マッチに成功します。この時、変数「$&」にはマッチした部分文字列「On」が代入されますが、同時に変数「$`」には「On」より前の「Ruby」が代入され、変数「$'」には「On」より後の「Rails」が代入されます。

/On/ =~ "RubyOnRails"
$` => "Ruby"
$& => "On"
$' => "Rails"

サンプルプログラム
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

マッチした文字列を取得($&)

2021年10月27日 | Ruby3.0.1
マッチした文字列を取得($&)

【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

【特別な変数「$&」について】
正規表現オブジェクトを作成し、「=~」メソッドを使って対象の文字列に対してマッチングを行った結果がマッチした場合、「=~」メソッドは文字列の中でマッチした部分のインデックスを返します。この時、対象の文字列の中でマッチした部分文字列が特別な変数「$&」に代入されます。

$&→特別な変数「$&」には正規表現によるマッチが行われるたびにマッチした部分文字列が都度上書きされていきます。なお、正規表現が文字列にマッチしなかった時には変数「$&」には「nil」が代入されます。

・例文
/year/ =~ "10 years old"
print($& + "¥n")
上記では正規表現は対象の文字列にマッチしますので、対象文字列の中で正規表現にマッチした部分文字列「year」が変数「$&」に代入されます

/ .+ / =~ "10 years old"
print($& + "¥n")
上記では正規表現は対象の文字列にマッチしますので、対象文字列の中で正規表現にマッチした部分文字列「 years 」が変数「$&」に代入されます。

【Regexp.last_match】
Regexpクラスで用意されているクラスメソッドの「last_match」を使ってもマッチした文字列を取得できます。

・書式
Regexp.last_match([nth])
変数「$&」と同じくマッチした部分文字列を取得する場合は、引数に「0」を指定して下さい。
例文
/ .+ / =~ "10 years old"
print(Regexp.last_match(0) + "¥n")

サンプルプログラム
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

文字クラスの略記

2021年10月24日 | Ruby3.0.1
文字クラスの略記

【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

文字クラスでは比較的よく利用される組み合わせがあります。例えば数字を表す「[0-9]」などです。このような比較的よく利用される文字クラスには略記が用意されています。

【数字を表す「¥d」「¥D」】
1.「¥d」は数字を表す略記法です
/¥d/
/[¥d]/
/[0-9]/
上記は0から9のいずれかの文字にマッチする
/¥d+/は任意の桁数の数字にマッチさせる

2.「¥D」は数字以外を表す略記法
/¥D/
/[¥D]/
/[^¥d]/
/[^0-9]/
上記は0から9以外の全ての文字にマッチします。

【英数字を表す「¥w」「¥W」】
1.「¥w」は英数字を表す略記法→文字クラスの「[0-9a-zA-Z_]」に該当
/¥w/
/[¥w]/
/[a-zA-Z0-9_]/

2.「¥W」は英数字以外を表す略記法
文字クラスの「[^a-zA-Z0-9_]」又は「[^¥w]」に該当
/¥W/
/[¥W]/
/[^¥w]/
/[^a-zA-Z0-9_]/

【空白を表す「¥s」「¥S」】
「¥s」は空白を表す略記法です。空白には文字通りスペースである「[ ]」の他に改行「¥n」、復帰「¥r」、改ページ「¥f」、水平タブ「¥t」です。文字クラスの「[ ¥t¥n¥r¥f]」に該当します。
/¥s/
/[¥s]/
/[ ¥t¥n¥r¥f]/

また「¥S」は空白文字以外を表す略記法→文字クラスの「[^ ¥n¥r¥f¥t]」又は「[^¥s]」に該当
/¥S/
/[¥S]/
/[^¥s]/
/[^ ¥n¥r¥f¥t]/

サンプルプログラム


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

文字クラス内でのメタ文字

2021年10月22日 | Ruby3.0.1
文字クラス内でのメタ文字


【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

パターン内で記述すると特別な意味を持つメタ文字ですが、文字クラスの中では一部を除いて単なる文字として扱われます。

【ハイフン(-)】
/[0-9]/
ブランケット([])内でハイフン(-)は範囲を表すメタ文字として扱われますが、
/[0¥-9]/
ハイフン(-)を1つの文字として扱いたい場合には「¥」を使ってエスケープします

【キャレット(^)】
/[^0-9]/
ブランケット([])内でキャレット(^)は否定を表すメタ文字として扱われます。
/[012^]/
上記では「0」「1」「2」「^」のいずれかの文字にマッチします。

【「.」「*」「+」「?」「{」「}」「|」】
/[.*+?(){}|]/
文字クラス以外で使用される下記のメタ文字は文字クラス内では特別な意味を持ちませんので単なる文字として扱われます。

【「[」「]」】
/[ab¥[cd¥]ef]/
ブランケット[]内で「[」や「]」を使用する場合は「¥」を使ってエスケープする必要があります。

【「¥」】
/[¥¥$]/
エスケープ処理を行うための「¥」はブランケット[]内でも特別な意味を持ちますので、「¥」を1つの文字として扱う場合には「¥」を使ってエスケープする必要があります。

サンプルプログラム

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

文字クラスの否定(^)

2021年10月20日 | Ruby3.0.1
文字クラスの否定(^)


【開発環境】
OS:Win10(64ビット)
Ruby 3.0.1
VSCodeバージョン: 1.57.1

【マッチさせたくない場合】
例えば、「0から9」までの文字以外の文字にマッチさせたい場合には次のように記述できます。
/[^0-9]/
否定を使う場合には必ず文字クラスの先頭に「^」を記述します。

文字クラスの途中に「^」を使いたい場合
/[ab^0-9]/
例えば上記では「a」「b」又は「0から9」以外、と言う意味ではなく、「a」「b」「^」「0から9」の文字クラスです。

否定「^」はそれ以降に記述された文字の候補以外ということになりますので下記の場合は「a-z」及び「A-Z」以外の全ての文字を表す文字クラスとなります
/[^a-zA-Z]/

サンプルプログラム
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする