柔軟性の高い正規表現を書こうとすると、避けて通れないのが先読み・後読みです。 先読み・後読みに関して、いままではとりあえず的な理解をしていたのですが、それだと説明できない正規表現に遭遇したので、説明できるまで理解を深めてみました。 とりあえず的な理解 正規表現を使って間もない人が先読み・後読みを理解するための説明です。 肯定的先読み (?=pattern) 次の正規表現では直後に def がある abc(def は含まない)に一致します。
![正規表現の先読み・後読みを極める!](https://cdn-ak-scissors.b.st-hatena.com/image/square/23d1d6504a87f54875d14e1fde510d6b729844df/height=288;version=1;width=512/https%3A%2F%2Fabicky.net%2Fassets%2F20100530%2Fcaret-d10a8b56fa7c866091636e0e1cfff1f7a6c640c493598c309d4ac28cdf8d4580c3c1557416eb0a95a45fa659ba97dd87dd68d21c97da5e8a0e1f2f42ca0d3a27.png)
正規表現を書く際、どのようなパターンにマッチさせるか、どこをキャプチャするかという視点で記述することはあっても、パフォーマンスを考えて記述するというのはある程度知っている人でなければ忘れがちな視点です。 このエントリでは、バックトラックをメインに正規表現がパフォーマンスに及ぼす挙動について見ていきます。 対象の正規表現エンジン ここでは、従来型 NFA を対象としています。具体的には、PHP の preg_ 関数で利用している PCRE や mb_ereg 関数が利用している鬼車です。Perl や Ruby、Python、Java、.NET でも従来型 NFA を採用しているので、似た挙動となるでしょう。 「従来型 NFA」や「バックトラック」などの用語については、「詳説 正規表現 第3版」のものを用いています。 バックトラックによるマッチ探査 正規表現エンジンでは、指定された文字列が、パ
MOONGIFTはオープンソース・ソフトウェアを紹介するブログです。2021年07月16日で更新停止しました 正規表現を使えないプログラマはいないと思いますが、その実力を100%引き出しているかと言われると自信はないのではないでしょうか。実際、機能は多いので一筋縄ではいきません。さらにプログラミング言語ごとの方言もあって極めるのは困難です。 そんな正規表現を使いこなそうと思ったら練習あるのみです。そのためにはテスト環境が必要です。RegExrがまさにそのためのソフトウェアになります。 RegExrの使い方 RegExrはJavaScript向けの正規表現が出力できるようです。実際のテキストを見ながらテストできるので、どこで失敗しているか、または別な文字で試した時に不具合がないかなどがチェックできます。 RegExrはnode/JavaScript製のオープンソース・ソフトウェア(MIT L
今まで、正規表現のメタ文字をエスケープするのに、バックスラッシュとかをいっぱい書いていたのだが、簡単にエスケープする記法があることに最近気づいた。さらにそのような文字列を生成するためのメソッドがあることにも気づいた。 パターン(置換前)文字列のエスケープ java.util.regex.Pattern#quote(java.lang.String) 置換後文字列のエスケープ java.util.regex.Matcher#quoteReplacement(java.lang.String) ということで、実際にプログラムを作って実行してみる。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { /** * @param args */ public static void m
https://github.com/VerbalExpressions/ObjectiveCVerbalExpressions ↑ 本家にマージされました。 https://github.com/kishikawakatsumi/ObjectiveCVerbalExpressions 概要 VerbalExpressions はメソッドチェーンとわかりやすい名前を使って、正規表現を読みやすくしようという試みです。 ↓ オリジナルはJavaScriptのライブラリのようです。 https://github.com/VerbalExpressions/JSVerbalExpressions iOS Dev Weeklyの106号でObjective-Cの移植はまだ無いみたいに書いてあったので、やってみました。 (実際は2つほど先に書かれたものがありました) ↓ 私が書いた Objective
Regex ColorizerはWeb上で動作する正規表現ハイライターです。 正規表現が正しくかけているかどうか、それが分からなくてやきもきする時は多いと思います。そこで使ってみたいのがRegex Colorizerです。 正規表現に格好いいカラーリングがされています。エラーの場合は赤文字が出ています。 ちょっと違うカラーリングも。 こんな感じの激しいカラーリングもあります。 Regex Colorizerを使って正規表現がハイライト表示されれば、自分が意図している正規表現を書けているかどうかチェックが容易になります。またエラーチェックも兼ねているのでミスしていてもすぐに分かるでしょう。 Regex ColorizerはJavaScript製、MIT Licenseのオープンソース・ソフトウェアです。 MOONGIFTはこう見る 正規表現には各言語ごとの方言があるので注意が必要です。例えば
正規表現の基本ここでは.NET Frameworkの正規表現について基本をごく簡単に(主に正規表現パターンについて)説明します。なお.NET Frameworkの正規表現はPerl5の正規表現に対応するようにデザインされているということなので、Perlの正規表現を理解していれば問題ありません。 なお、「正規表現テストツール」を使って正規表現のテストを行うことができますので、お役立てください。 正規表現で何ができるか正規表現は、文字列を検索するために使用します。正規表現を使うと、かなり複雑な検索が可能です。正規表現を利用する主なケースには以下のようなものが挙げられます。 文字列内に指定されたパターンと一致する部分があるか調べる。例えば、入力された文字列が電子メールアドレスとして適当か調べるなど。文字列から指定されたパターンと一致する部分を検索、抽出する。例えば、文字列内にあるURLの部分をす
これは便利。 var counter = function () { var static = /(^o^)/; return ('i' in static)? ++static.i: static.i = 0; }; console.log(counter()); // 0 console.log(counter()); // 1 console.log(counter()); // 2 console.log(counter()); // 3 正規表現リテラルは毎回解釈されるわけではなく、一度作られると同じオブジェクトが使われるのでstatic変数のような挙動をする。だから、RegExp#lastIndexとかを直接弄る時はよく気をつけないといけない。
一般的な正規表現を使ったツールでは中級編までの内容がそのまま使えると思います。 たとえばSedやAWKならば問題なく使えます。 ここではPerl等のかなり強力なツールでしか使えないような表現を説明します。 もちろん、K2Editorでも使える表現です。 以前出てきた繰り返し表現では、繰り返し回数を指定する事はできませんでした。 たとえば、aの3回繰り返しを検索したい場合、 「a+」では3回繰り返し以外でもマッチしてしまいます。 ですから、「aaa」としなければなりません。 拡張された表現では繰り返し回数を指定できます。 基本的な書式は「{n,m}」です。 nが最小回数、mが最大回数です。 最大と最小が同じ場合、つまり固定回数の時には 「{n}」と書きます。 aの3回繰り返しは 「a{3}」と書けます。 2回以上5回以下の繰り返しは 「{2,5}」と書けます。 5回以上の繰り返しは 「{5,
2007年10月05日00:00 カテゴリTipsLightweight Languages tips - ApacheのLogフォーマットの方を変えて高速化 というより、高負荷サーバーの場合、ApacheのLog Formatを変更しちゃった方がいいでしょう。 ? (高速に)Apache の log を解析する正規表現 : a++ My RSS 管理人ブログ こんなの広めちゃいかん と思いついついエントリ。具体的には、 LogFormat "%h\t%l\t%u\t%t\t\"%r\"\t%>s\t%b\t\"%{Referer}i\"\t\"%{User-Agent}i\"" combined_tsv ないし、さらに LogFormat "%h\t%l\t%u\t%t\t%r\t%>s\t%b\t%{Referer}i\t%{User-Agent}i" combined_tsv として
機能限定版の正規表現をトップダウン構文解析して非決定性有限オートマトン(NFA)を生成し、それから部分集合構成法で決定性有限オートマトン(DFA)を生成するコードを Perl で書いてみました。 扱う正規表現は、総称文字(.)や文字クラス([][…][])が使えず、1文字そのものしか扱えず、繰り返し指定は ? と * しか使えません。括弧 (…)は Perl の (?:…) に相当し、パターンの記憶はできません。複数選択の | は使えます。 ネタ元のドラゴンブックの字句解析部の説明で使われているプログラミング言語の断片の字句を Perl 風にちょっと変更した正規表現を DFA にして字句それぞれにマッチさせるサンプルを書くと次のようになります。 (追記) このパッケージの DFA と NFA の match メソッドは m/\A…\z/ の動作をします。 #!/bin/env perl u
CSV形式のファイルをDataTableや配列等として取得するCSV(Comma Separated Value)形式のファイルをDataTableや配列として読み込む方法を幾つか紹介します。ここでは3つの方法を紹介しますが、その前にCSVとはなにかについて確認しておきます。 CSV形式とは?CSV形式について、絶対的な決まりは存在していないようです。ただし、一般的なアプリケーションで使われている決まりについては、「CSV Comma Separated Value File Format (How To)」で説明されています。 要約しますと、次のようになります。 レコードは、LFまたはCRLFで区切られる。フィールドは、カンマ(,)で区切られる。区切りのカンマの前後のスペース(タブを含む)は無視される。フィールドにカンマが含まれる場合、フィールドをダブルクォート(")で囲まなければならな
文字列の検索や文字列の書式チェックに使うだけでも正規表現は便利なのですけど、置換の際にも使えるようになると、正規表現を何倍も便利に感じられます。 多機能なテキストエディタであればたいていは正規表現を用いた置換をサポートしています。プログラミングする方だけでなくテキストエディタで文章を書いている方にとっても便利な道具となりますので、正規表現による置換処理をぜひ身につけていって下さい。 なお、このページは基礎入門編を読み終えた方を想定しております。正規表現について分からないことがあればそちらをご覧下さい。 登場した正規表現はリファレンスにまとめてあります。まとめて振り返る時などはこちらをご覧下さい。 まずは基本から。単純な文字列置換を紹介します。置換では「マッチパターン」と「置換文字列」の二つを指定することになります。例えば「ください」を「下さい」に置換する場合、マッチパターンと置換文字列はそ
文字列中のURLに自動的にリンクを設置する―Pattern/Matcherクラス(2)― 正規表現は、任意の文字列パターンを検出するだけのものではありません。例えば、本項の例のように、文字列中からURL文字列を抽出し、リンク文字列に置き換える手法などは、掲示板アプリケーションなどではいわば定石ともいうべきテクニックです。 そのほか、メールアドレスに対しても同様の効果が適用できるでしょうし、また、文字列中からHTMLタグを取り除く場合にも応用可能です。 <%@ page contentType="text/html;charset=Shift_JIS" import= "java.util.regex.*" %> <%! private String urlLink(String strVar){ Pattern objPtn=Pattern.compile("(http://|https:
This section is surprisingly small because the rest of the FAQ is littered with answers involving regular expressions. For example, decoding a URL and checking whether something is a number are handled with regular expressions, but those answers are found elsewhere in this document (in perlfaq9: "How do I decode or create those %-encodings on the web" and perlfaq4: "How do I determine whether a sc
オープンソースブラウザ「Google Chrome」の動作速度向上に向けたGoogleの試みの一環として、Chromeのプログラマーらは、サードパーティーのソフトウェアパッケージを捨て、独自のパッケージに切り替えた。 この変更は、正規表現と呼ばれるJavaScriptテキストを処理するためのキーコンポーネントに関するもの。プログラマーのErik Corry氏、Christian Plesner Hansen氏、Lasse Reichstein Holst Nielsen氏の3人は、The Chromium Blogへの投稿で、「JavaScriptの他の部分は改善してきたが、他の部分よりも正規表現の遅れが目立ち始めた。そこで、われわれは、外部ライブラリを利用するよりも、われわれの既存のインフラと統合することにより、JavaScriptの性能が向上するはずだと考えた」と述べている。 その結果
正規表現が苦手だ。 そんなあなたにおすすめなのが、『strfriend』。正規表現を視覚化してくれるツールだ。 このサイトでは、↑のように正規表現を図にしてくれる。 簡単なものからややこしいものまで、図にするととてもわかりやすい。 正規表現を視覚化してくれるツール、チェックして一度使ってみてはいかがだろうか。 » strfriend 「Ebisu Gigs」の忘年会に行ってきた。いろんな人がいて楽しかったね。昨日はかなり酔いつぶれてやっとの思いで帰り着きました。。
jokergaming สล็อตออนไลน์ที่มาแรงที่สุด เครดิตฟรี jokergaming สล็อตออนไลน์ที่มาแรงที่สุด เครดิตฟรี 100 ไม่ต้องฝาก ในวันนี้ทางเว็บไซต์ของเรา จะขอเสนอข้อมูล เกมสล็อตฟรีเครดิต 100 แบบไม่ต้องฝาก แบบไม่ต้องแชร์ เชื่อเลยว่า มันคือหนึ่งในคำถาม ที่นักพนันมือใหม่บนัสเครดิตฟรี จากเว็บตรงนั้น สามารถถอนได้จริง ๆ แล้ว โดยเรา ทำการสมัครสมาชิกกับเว็บ และเป็นการเปิดโอกาส ให้กับผู้เล่นใหม่ ๆ ได้เข้ามาทดลองเล่นเกม เ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く