Please remember this entry will be public in the community library. This is not your personal regex library! To save, access and manage your personal entries, please go to the account page instead.
(Last Updated On: 2018年8月13日)前のエントリでStackExchangeがReDoSで攻撃されサイトがダウンした問題を紹介しました。少しだけ掘り下げて見たところ、正規表現だけでメールアドレスをチェックしている場合、壊滅的なReDoS(十分短い文字列で指数関数的に実行時間が増加する)が可能なことが判りました。 結論を書くと、正規表現でのメールアドレスチェックは見直すべき、です。(特にRubyユーザー) 追記:影響範囲はメールアドレスチェックに限らないので、正規表現チェックは全体的に見直さないと、どこが脆弱なのか判りません。見直してチェックしたとしても、それが完全であったと保証することは困難です。ネット検索して直ぐに見つかった検索パターンは非常に脆弱であったこと、メールアドレスのマッチパターンは脆弱になりやすい繰り返しの繰り返しが含まれること、これらがあったのでタイト
正規表現のパターンの中に正規表現グループ(キャプチャグループ)を設定することで、パターン全体にマッチした文字列とは別に、パターンの中の一部分にマッチした文字列を取得することができます。ここでは Java の正規表現で正規表現グループを利用する方法について解説します。
ある正規表現に対して、特定の文字列がマッチするかどうかをチェックするツールやサイトは沢山ありますが、正規表現そのものが何を意味しているのか、どんな文字列を期待しているのかを解析・解読・説明してくれるツールやサイトってなかなか見ない気がします。 他人の書いた正規表現を見て、「ん?」ってなったことはありませんか? 例えばこれ。 1 ^[a-zA-Z0-9-_.]@([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,4}$ これくらいなら分かりますが、複雑になってくるとつらい… いつかはマスターしたいけど…今は楽したい。 そう思ってググってみると…ありました! それがこちら。 Regexper http://www.regexper.com/ 正規表現を入力して Display をクリックすると、その正規表現が表す内容を図にして表示してくれます。 例えば先程の正規表現は、当記事の一番上の
Regular Expression Test String Custom Time Format (See also ruby document; strptime) Example (Apache) Regular expression: ^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$ Time Format: %d/%b/%Y:%H:%M:%S %z
はじめに CSVファイルのヘッダー行だけを置換するPerlワンライナーを作ってみました。 下の例では列名に含まれるスペースをアンダーバーで置き換えています。 2行目以降のデータは置換されません。 DBD::CSVモジュールでは列名にスペースが入るとダメみたいなので、これを作りました。 ワンライナー perl -0777pi -e 's/^([^\n]+)\n/join("_", split(" ", $1)) . "\n"/e' test.csv 置換前 COL 1,COL 2,COL 3 A 1,B 2,C 3 D 4,E 5,F 6 置換後 COL_1,COL_2,COL_3 A 1,B 2,C 3 D 4,E 5,F 6 ワンライナーの読み方 1行目だけを取得したいので、ワンライナーのオプションで「-0777」を指定してファイル全体を一つの文字列と見なしています。 さらに「^([^\
正規表現の概要 正規表現は、Perlの中で最も重宝する機能のひとつです。正規表現にはテキスト処理のための様々な機能があり、文字列の中から特定のパターンを見つけ出したり、置換したりすることができます。 正規表現の基本的な使用方法 たとえば、$strという変数に格納したデータの中から、「A」で始まって途中は何があるかわからないが最後が「E」という文字列を探したい場合、次のように記述することで、条件にマッチする文字列を見つけることができます。 $str =~ /A.*E/; 上記では、ドット( . )が改行以外の1文字を表し、アスタリスク( * )がその任意の文字の0回以上の繰り返しを意味します。このように、正規表現において特殊な働きを持った文字を正規表現演算子、またはメタ文字と呼びます。また、=~ はパターン結合演算子と呼ばれ、「左辺の値から右辺の値を検索する」という意味があります。 正規表現
正規表現というと、便利そうなんだけど読み方がわからないし、わけのわからない記号が並んでいてあまり近づきたくないという人もいると思います。ネット上のサンプルを見ると記号がたくさん並んでいて取っつきにくそうな雰囲気があって、中には魔法の呪文だろうこれはと言いたくなるようなものもあります。しかし、普段使うような正規表現は少しのルールを覚えるだけでたいてい読めるようになります。簡単なものであれば、慣れてしまえば一瞬で読めるようになりますし、慣れないうちでもルールに沿って読んでいけば何が書いてあるのかは意外と簡単に読めるものなのです。 このページでは、基本的な正規表現を紹介しています。説明を読むだけではなかなか覚えられないという方のために、実際に正規表現を入力して動作を確認できる練習問題も用意しています。 正規表現は一度しっかり覚えてしまえば二度と忘れることはありませんので、ぜひここで確実に身につけ
高速かつ省メモリなGoogleの正規表現ライブラリ re2 についてのメモ。 RE2は、PCRE や Perl や Python で使われているようなバックトラッキング正規表現エンジンの代替となる、高速で、安全で、スレッド・フレンドリーなC++ライブラリです。 バックトラッキング・エンジンは一般に機能や便利なシンタックスシュガーが満載ですが、小さな入力に対してさえも指数関数的に時間がかかる羽目に陥ることがあります。RE2はオートマトン理論を用い、正規表現検索が入力のサイズに対し線形の時間内に走ることを保証しています。 検索を固定量のメモリに制約できるように、RE2はメモリ制限を実装しています。 どのような入力もしくは正規表現を処理しなくてはならないとしても、小さな固定のC++スタック量のみ使用するようRE2は設計されています。そのため、RE2はスレッドスタックを任意に拡げられないマルチスレ
正規表現と構文図について解説します。オートマトンについても詳しく述べます。オートマトン・スゴロクで遊びましょう! 世間でよく知られている/使われている概念・方法にはこだわらず、僕(檜山)の感覚で一番わかりやすいと思われる筋書きと用語法/図式法を使って説明します。この記事に目を通して“感じ”が掴めたら、形式言語理論の教科書を読み始めることが出来るでしょう。 [追記]この記事の内容に対する具体例は、「正規表現とオートマトン:なんだ簡単じゃん、JavaScriptによる実装」にあります。[/追記] 内容: 正規表現 正規表現の例 構文図 基本記号 連接 選択 省略可能 繰り返し ストレートワイヤーによるレイアウト調整 有限状態オートマトン 有限状態オートマトンの実行 バックトラックと先読み スゴロクとオートマトン コマをたくさん使うスゴロクと並列処理 非決定性オートマトンと決定性オートマトン 正
Guides, HowTos and Tips for Technology Geeks - The Geek Stuff LinuxやFreeBSDなどのUnix系OSを使う場合に必須になるコマンドのひとつにgrep(1)がある。grep(1)は指定した文字列をファイルや標準入力から抜き出したり、またその逆の処理を行うなどの目的で利用されるコマンド。特定のキーワードを指定してファイルを特定するために利用されるほか、コマンド出力を加工したり、データを加工したりといった用途で使われている。 grep(1)はキーワードの指定に正規表現を指定できる。正規表現はgrep(1)の活用範囲をきわめて広くする重要な機能であり、grep(1)の基本的な使い方をマスターした後にぜひ習得しておきたい機能といえる。The Geek StuffのAdvanced Regular Expressions in Gr
今回は,ファイルの検索方法と正規表現の基礎を具体的に紹介します。基礎の基礎なので,しっかりと覚えておきましょう。 前回 は,Linux(Ubuntu)上でC/C++言語のコンパイルを試してみました。今回は,ファイルの検索方法と正規表現の基礎を紹介します。 プログラミングを続けていると,いつの間にかたくさんのファイルが作られていて,「あのファイルはどこに?」と探し回ることになりかねません。今回はファイルの検索について取り上げます。 シェルのメタキャラクタ 「拡張子が".txt"であるファイル」を表す場合,「*.txt」のように表すことができるのはご存じでしょう。任意の長さの文字列を表す「*」や,任意の1文字を表す「?」のことをワイルドカードと呼んでいますが,Linuxでも同様に「*」「?」を使うことができます。 早速,端末を起動して試してみましょう(図1)。端末は[アプリケーション]メニュー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く