タグ

正規表現に関するpick_mugetuのブックマーク (8)

  • Vimmerに捧げる正規表現の基礎中の基礎 — KaoriYa

    正規表現はVimに限らずコンピューター上でのテキスト操作において非常に強力です。 しかし学習の難しさも非情で多くのIT技術者、Vimmerが正規表現に苦しんでいるのを幾度となく目の当たりにしています。 ただ正規表現は当にそんなに難しいのでしょうか。 いいえそんなことはありません。 正規表現は来とても簡単な原理で学習も容易なのです。 にも関わらず難しいと思われてしまうのは、原理を理解しないまま外見上の機能をそのまま覚えようとするからです。 記事では正規表現の原理にフォーカスし解説することで、Vimを含む様々な正規表現実装の利用難度を適切にしようという記事です。 記事は Vim Advent Calendar 2019 の1日目の記事です。 「正規表現」はもともと形式言語という言語学の一分野の研究から生まれました。 言語学というのは言葉を科学的に研究する学問です。 形式言語はその中でも

  • 正規表現のoオプションにPerlの暗黒面を見た - はこべにっき ♨

    Perlの正規表現のoオプションてご存じでしょうか? うちはあまり使ったことがなかったのですが,効率のよい正規表現処理を行うときには便利なオプションです. oオプションを使うと,その正規表現のコンパイルが1回しか行われなくなります.たとえば,正規表現の評価が繰り返しのなかで現れると,コンパイルが何度も行われて効率が悪くなります.そういったときにoオプションを付与しておけば,正規表現コンパイルのオーバーヘッドを最小限にとどめることができます. chomp(my $pattern = <>); for my $n (0..100000000000) { # すごく回数の多いループ # oをつければ正規表現がコンパイルされるのははじめの1回だけなので安心 if ($n =~ m/^$pattern$/o) { say "match!"; } } 正規表現が静的な場合は,Perlはこのような最適化

    正規表現のoオプションにPerlの暗黒面を見た - はこべにっき ♨
  • 無料&登録不要で正規表現を図示してくれる「Regexper」を使ってみた

    アプリ開発の場面では、入力されたテキスト内に誕生日などの特定パターンの文字列が含まれているかを確認したり、別の文字列に置き換えたりするときに、正規表現は必須です。しかし、正規表現を誤ってしまうと、アプリケーションによっては、データを破壊してしまったり、誤作動を起こすリスクがあるのも事実。このため正規表現を変更する場合、事前に試験用の環境で試すのが普通ですが、開発現場によっては、試験用の環境であっても簡単に適用できない場合や、番用の環境しかないなど、試す場面が限られることが考えられます。このとき、机上での検証を行いますが、人の手による検証は、どれだけ実力のある人がチェックしても誤るリスクがあり、不安を拭うことはできません。「Regexper」を使えば、入力した正規表現を無料で、機械的に図示して、読みやすくしてくれるとのこと。複雑な正規表現を入力しても読みやすくなるのか、実際に使ってみました

    無料&登録不要で正規表現を図示してくれる「Regexper」を使ってみた
  • 正規表現(肯定先読み、否定先読み、肯定戻り読み、否定戻り読み) - satosystemsの日記

    自分のためにメモ。 (肯定|否定)(先読み|戻り読み)、覚えづらい。 正規表現 パターン(boost::regex) 説明 肯定先読み (?=regex) regex に一致する文字列が始まる位置にある検索文字列と一致する。一致した文字列は記憶されず、後で使用することはできない。 たとえば "Windows (?=95|98|NT|2000)" は、"Windows 2000" の "Windows" には一致するが、"Windows 3.1" の "Windows" には一致しない。 先読み処理では、読み進まれた文字は処理済みとは見なされない。一致の検出後、次の検索処理は先読みされた文字列の後からではなく、一致文字列のすぐ後から開始される。 否定先読み (?!regex) regex に一致しない文字列が始まる位置にある検索文字列と一致する。一致した文字列は記憶されず、後で使用することは

    正規表現(肯定先読み、否定先読み、肯定戻り読み、否定戻り読み) - satosystemsの日記
  • 正規表現の先読み・後読みを極める!

    柔軟性の高い正規表現を書こうとすると、避けて通れないのが先読み・後読みです。 先読み・後読みに関して、いままではとりあえず的な理解をしていたのですが、それだと説明できない正規表現に遭遇したので、説明できるまで理解を深めてみました。 とりあえず的な理解 正規表現を使って間もない人が先読み・後読みを理解するための説明です。 肯定的先読み (?=pattern) 次の正規表現では直後に def がある abc(def は含まない)に一致します。

    正規表現の先読み・後読みを極める!
  • gccの正規表現がバグだらけという話 - Qiita

    !!!??? どうなってるの??? これ、"_" の場所を変えたりしたらマッチするようになるんですよ。 なぜか? わからない。わかりたくもない。 こんなファッキンなバグが、gcc 4.9.2 まで残ってるんですよ。 4.9.3 では直っていました。 その2 今度は、これをgcc 4.9.2 で実行してみましょう。 文字クラスにマッチさせるだけの簡単な正規表現です。 string s("~"); smatch m; regex re(R"([~\-_])"); if (regex_search(s, m, re)) { cout << m[0] << endl; } else { cout << "Not matched" << endl; }

    gccの正規表現がバグだらけという話 - Qiita
  • パフォーマンスを意識して正規表現を書く - Shin x Blog

    正規表現を書く際、どのようなパターンにマッチさせるか、どこをキャプチャするかという視点で記述することはあっても、パフォーマンスを考えて記述するというのはある程度知っている人でなければ忘れがちな視点です。 このエントリでは、バックトラックをメインに正規表現がパフォーマンスに及ぼす挙動について見ていきます。 対象の正規表現エンジン ここでは、従来型 NFA を対象としています。具体的には、PHP の preg_ 関数で利用している PCRE や mb_ereg 関数が利用している鬼車です。PerlRubyPythonJava、.NET でも従来型 NFA を採用しているので、似た挙動となるでしょう。 「従来型 NFA」や「バックトラック」などの用語については、「詳説 正規表現 第3版」のものを用いています。 バックトラックによるマッチ探査 正規表現エンジンでは、指定された文字列が、パ

    パフォーマンスを意識して正規表現を書く - Shin x Blog
  • HTMLのpattern属性とJavaScript正規表現のunicodeオプション - Hatena Developer Blog

    こんにちは、Webアプリケーションエンジニアのid:nanto_viです。みなさんHTMLのフォーム検証機能は使っていますか? 近年は各Webブラウザの対応も進み、お手軽にフォームの利便性を高められるようになっています。 そんなフォーム検証機能のひとつがinput要素のpattern属性です。pattern属性の値にJavaScriptの正規表現パターンを指定することで、ユーザーの入力が意図しないものであった場合、フォーム送信ができなくなります。下図は5桁の数字の入力が求められるところに3桁しか入力せずフォーム送信しようとしたところです。ブラウザに組み込みのエラー表示が出現し、またそのメッセージにtitle属性の値が使われていることを確認できるでしょう。(pattern属性を指定する際には、title属性に書式の説明を記述することが推奨されています。) <input type="text"

    HTMLのpattern属性とJavaScript正規表現のunicodeオプション - Hatena Developer Blog
  • 1