Rubyにおける正規表現の使用に関する分析
2022-02-03 14:06:44
文字列のテキストを見つけるだけなら、正規表現を使用しないでください: string['text'].
単純な構造の場合は、string[/RE/] を使ってクエリを実行すればよい。
match = string[/regexp/] # get content of matched regexp
first_group = string[/text (grp)/, 1] # get content of captured group
string[/text (grp)/, 1] = 'replace' # string => 'text replace'
結果をグループ化する必要がない場合は、グループ化されていないグループを使用します。
/(first|second)/ # bad
/(? :first|second)/ # good
Perl のレガシー変数をマッチの正規グループ化 (例: $1, $2, など) に使う代わりに、 Regexp.last_match[n] を代替手段として使うことができます。
/(regexp)/ =~ string
...
# bad
process $1
# good
process Regexp.last_match[1]
何を表しているのかわかりにくいデジタルな名前のグループは使用しないようにしましょう。代わりにグループに名前を付けます。
# bad
/(regexp)/ =~ string
...
process Regexp.last_match[1]
# good
/(? <meaningful_var>regexp)/ =~ string
...
process meaningful_var
文字クラスには、注意すべきいくつかの特殊なキーワードがあります。そのため、.や[]の中の括弧をエスケープしないでください。]
なお、^と$は、文字列の末尾ではなく、行頭と行末にマッチするので、文字列全体にマッチさせたい場合は、 \Aと \Zを使用します。
string = "some injection\nusername"
string[/^username$/] # matches
string[/\Ausername\Z/] # don't match
複雑な正規表現の場合は、x モディファイアを使用します。これにより、可読性が向上し、有用なコメントを含めることができます。ただ、空白文字は無視されることに注意してください。
regexp = %r{
start # some text
\s # white space char
(group) # first group
(? :alt1|alt2) # some alternation
end
}x
sub/gsubは、複雑な置換操作のためのハッシュとブロック形式の構文もサポートしています。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Rubyの乱数生成方法のまとめ
-
Railsにフィールド暗号化ストレージを実装
-
PythonのFlaskフレームワークでSERVER_NAMEドメイン名を設定するためのチュートリアル
-
Windowsでrubyとrailsをインストールする際に発生する問題点まとめ
-
Ruby on Railsで構築するアプリケーションの基本的なディレクトリ構造のまとめ
-
Rubyのオブジェクト指向プログラミングにおけるスコープの簡単な説明
-
デザインパターンにおけるDecoratorパターンを用いたRubyの例
-
Rubyのインストールと操作
-
RubyGnome2 ライブラリを用いた GTK 環境での Ruby GUI プログラミングの基本的な考え方
-
Rubyバージョン管理ツールRVMのインストールとチュートリアルの使用方法