/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ だ。いいね? なぜこの正規表現がいいのか ちなみにこれの何がいいかというと 「HTMLの標準仕様を定めるWHATWGの正規表現をそのまま使っている」ところ。 つまり、各ブラウザのデフォルトの<input type="email" />のバリデーションと一致するという大きなメリットを得られる。 これはMDNにも載っている列記とした「実用的な」正規表現だ。 ちなみにRFCオタクがRFC準拠のおおよそ実用に耐えないであろうメールアドレスの正規表現を推してくるかもしれないが無視して良い。 例えば、RFCに準拠している以下のようなメ

「正規表現」はさまざまなプログラミング言語やアプリケーションから利用できますが、正規表現で使われている「記号」がどのように選ばれたのか不思議に思っている方もいるかもしれません。 今回、正規表現の"$"と"^"が行末・行頭を示すラインアンカーとして選ばれた理由を推測するブログ記事、「Why do regexes use `$` and `^` asline anchors?」が公開され注目を集めています(Reddit)。 記事を作成したコンサルタントのHillel Wayne氏によると、正規表現が最初に登場したのはKen Thompson氏が移植したQEDテキストエディタだとのことです。移植版のQEDエディタのマニュアルには以下のような情報が掲載されています。 b) "^" is a regular expression which matches character at the beg

導入 アイヌ語は日本語と異なり、閉音節(子音で終わる音節)も存在するので、表記の際音素文字であるラテン文字なら、そのまま p, t, k, m, n, s, r などの子音文字を後ろの付ければ良いわけなので、アイヌ語ローマ字表記では、何も問題が生じない。しかし、元々開音節言語である日本語に特化したカタカナのような仮名文字で表記する際、鼻音 n は「ン」でなんとかなる(実はそれでもまずい事になっているけどここでは割愛する)が、p, t, k, m, n, s, r, h はどうしようもないので、特殊の捨て仮名(小書き仮名文字)を利用することになっている。 具体的には以下のような特殊仮名文字(通称 アイヌ語仮名)である。 ㇷ゚ -p ッ -t ㇰ -k ㇺ -m ㇱ -s ㇻ -(a)r, ㇼ -(i)r, ㇽ -(u)r, ㇾ -(e)r, ㇿ -(o)r お分かり頂けただろうか… 問題 r

2023年6月15日に『深掘りRubyKaigi2023 with spikeolaf & makenowjust』を開催しました。イベントの内容をほぼ全文文字起こし形式でお届けします。この記事は第1部です。 hey.connpass.com イベントのアーカイブはYouTubeでも公開しています。 www.youtube.com 登場人物 ゲスト makenowjust/藤浪 大弥さん spikeolaf/金子 雄一郎さん STORES fujimura/藤村 大介 shyouhei/卜部 昌平 hogelog/小室 直 正規表現に興味を持ったきっかけ fujimura:最初は藤浪さん、makenowjustさんに正規表現の発表について伺おうと思います。まずは改めてRubyKaigi2023でどんなことを発表したかを紹介いただけないでしょうか? makenowjust:Rubyの正規

RubyKaigi2023で「Make Regexp#match much faster」という発表をします、@makenowjust です。この発表では、ReDoS対策のためにRuby 3.2で導入された、正規表現マッチング (Regexp#match) の メモ化による最適化 について解説します。 さて、発表の中に次のようなスライドがあります。 このスライドはRubyの正規表現がいかに強力かを説明するためのもので、例として「2進数の足し算を計算する正規表現」を示しています。 また、このツイートで使っている正規表現も、実はこの正規表現です。 今回の記事では、この「2進数の足し算を計算する正規表現」の解説をしていきたいと思います。 「2進数の足し算を計算する正規表現」 コピペがしやすいように、スライドの画像ではなくテキストのコードで上の正規表現を出しておきます。 RE = /(?<s>[

9月からRuby開発チームにインターンシップとして参加している@makenowjustです。 総合研究大学院大学の学生で、普段は情報セキュリティに関する研究をしています。 インターンシップでは、キャッシュ (メモ化) を利用したRubyの正規表現の高速化を行いました。 ReDoSと呼ばれる、バックトラックが爆発することでマッチング時間が膨大になる脆弱性があります (ReDoSについては、拙作ですがWEB+DB PRESSに掲載された記事があります)。 近年、ReDoSは多く報告されており、Rubyもその例外ではありません (参考1、参考2)。 今回実装した最適化は、ReDoSを防ぐことを目的としたもので、多くの正規表現のマッチング時間が文字列の長さに対して線形となります。 ReDoSが起こる正規表現の例として、/^(a|a)*$/が挙げられます。 今回の修正の前後での実行時間を比較すると、

正規表現の「先読み(lookahead)」「後読み(lookbehind)」について紹介します。 正規表現の「位置へのマッチ」 正規表現は、文字列のパターンマッチに使われます。たとえば [0-9]{4} は数字 4 つが並ぶ文字列にマッチする表現です。 多くの正規表現は「文字列」にマッチしますが、「文字列」ではなく「位置」にマッチする表現があります。これは、アンカーと呼ばれます。また、長さ 0 の文字列にマッチすると考えて、ゼロ幅アサーションとも呼ばれます。 アンカーの例として、^(先頭)$(末尾)\b(単語の境界)などがあります。 この例では、cat にはマッチします。一方、category や concat は cat を含みますが前後が単語の境界になっていないためマッチしません。 先読み 先読み(lookahead)は、位置にマッチする記法の一種です。位置の指定に正規表現を使います。

leading zero を許容しない十進非負整数は、 /^(0|[1-9][0-9]*)$/ と表現できる。これは、 /^(0|([1-9]0*)+)$/ と表現することもできる。 以下では、「数」は「 leading zero を許容しない十進非負整数」と同じ意味で扱う。 「 x が 3 の倍数である」と「 x の各桁の数字の和が 3 の倍数である」が同値であることは知られている。 ということは、「 3 の倍数の後ろに 3 の倍数の繋げたもの」も 3 の倍数である。 ということは、3 の倍数全体の集合を正規表現で表現できるはずである。 できた。 /^(0|(([147][0369]*([147][0369]*[258][0369]*)*([147][0369]*[147]|[258])|[258][0369]*([258][0369]*[147][0369]*)*([147]|[258
最終目標は、最小限のコードで正規表現ユースケースの大部分をカバーできるくらい十分堅牢な構文を提供することです。 1文字と一致させる まずはじめに、1文字のパターンと1文字で構成される文字列を引数に取り、一致するかしないかを示すブール値を返す関数を作成してみます。1文字のパターンである . はワイルドカードとされ、任意の文字リテラルと一致します。 下記のようなかんじです matchOne('a', 'a') -> true matchOne('.', 'z') -> true matchOne('', 'h') -> true matchOne('a', 'b') -> false matchOne('p', '') -> false function matchOne(pattern,text) { if (!pattern) return true // 任意テキストが空パターンと一致

Just copy and paste theemail regex below for the language of your choice. Feeling hardcore (or crazy, you decide)? Read the official RFC 5322, or you can check out thisEmail Validation Summary.Note there is no perfectemail regex, hence the 99.99%. GeneralEmail Regex (RFC 5322 Official Standard) (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\
※Vimのmagicを利用した正規表現は、記述方法が異なりますので、ご注意下さい。こちら「 正規表現:特殊文字(メタ文字)の一覧 」をご覧ください。 最短マッチを見つける正規表現 さて、具体例を見ていきましょう。例えば、から<a></a>で囲まれたアンカータグを「1つだけ」取り出す事を考えます <nav> <a href="/about">About</a> | <a href="/access">Access</a> | <a href="/contact">Contact</a> </nav> 改行以外のすべての文字を表す「.」を利用して、「<a . *</a>」と言った正規表現が思いつきます。ですが、これだと「最長一致」を探してしまい、上記の例だと、3つのアンカータグをひと続きでマッチしてしまいます。 // アンカータグを検出?(デリミタに#を利用) #<a.*>(.*)</a>#
正規表現の "先読み" / "後読み" を、分かりにくいと感じるすべての人にお送りします。 --- 追記:2017/06/04 コメントにて、ご指摘を頂いております。 当記事の解釈には誤りがあります。コメントのご指摘内容をご覧いただければ幸いです。 当記事の主旨としては、"先読み・後読み" よりも "ルックアヘッド" の方が、意味を捉えやすいのでは?というものでしたが.. そもそも私の、「lookahead」の解釈(とくに、look の主語はどれなのかという部分だと思います)に、勘違いがありました。 ですので、いまのところ当記事の主題は、「"先読み" でも、"ルックアヘッド” でも、どちらでもよいけど、しっかりと厳密に理解しよう!(反省)」となります。 コメント本当にありがとうございました! --- 結論を先に書きます (?=a) のような正規表現は、一般的に「先読み」と呼ばれています。
![[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita](/image.pl?url=https%3a%2f%2fcdn-ak-scissors.b.st-hatena.com%2fimage%2fsquare%2f410c3d412478ee539641a77fe623cca950f16bac%2fheight%3d288%3bversion%3d1%3bwidth%3d512%2fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526mark64%253DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JTVCJUUzJTgyJUIzJUUzJTgzJUE5JUUzJTgzJUEwJTVEJTIwJUU2JUFEJUEzJUU4JUE2JThGJUU4JUExJUE4JUU3JThGJUJFJUUzJTgxJUFFJUU1JTg1JTg4JUU4JUFBJUFEJUUzJTgxJUJGJTJGJUU1JUJFJThDJUU4JUFBJUFEJUUzJTgxJUJGJUUzJTgxJUFGJUUzJTgwJTgxJUUzJTgxJUE5JUUzJTgxJTg2JUU4JTgwJTgzJUUzJTgxJTg4JUUzJTgxJUE2JUUzJTgyJTgyJUU1JTkwJThEJUU1JTg5JThEJUUzJTgxJThDJUU2JTgyJUFBJUUzJTgxJTg0JUUzJTgxJUFFJUUzJTgxJUE3JUUzJTgwJTgxJUU1JTkxJUJDJUU3JUE3JUIwJUU3JUE2JTgxJUU2JUFEJUEyJUU0JUJCJUE0JUUzJTgyJTkyJUU1JTg3JUJBJUUzJTgxJTk3JUUzJTgxJUE2JUUzJTgzJUFCJUUzJTgzJTgzJUUzJTgyJUFGJUUzJTgxJUE4JUU2JUIwJTk3JUU4JUJCJUJEJUUzJTgxJUFCJUU1JTkxJUJDJUUzJTgyJTkzJUUyJTgwJUE2JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0wZjgzMzEwZTk1Y2Y3MWVlMjRmMjVkZTU1YTc0N2QyZg%2526mark-x%253D142%2526mark-y%253D112%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwbW9jaGl6dWtpa290YXJvJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz02MDJlZDc5NzE4MWM3ZDQ0YmIxOTMyMzFiMGU2MzVkOA%2526blend-x%253D142%2526blend-y%253D491%2526blend-mode%253Dnormal%2526s%253D85b983ba91ea6ab5e6094c57c4ca6b3c&f=jpg&w=240)
2017.03.23Ruby 2.4.1新機能: Onigmo正規表現の非包含演算子(?~ )をチェック こんにちは、hachi8833です。Ruby 2.4.1リリースおめでとうございます。 多くの修正・変更点の中から、私にとって関心の高い非包含演算子を取り急ぎチェックしてみました。結構奥が深そうなので、何かわかったら別途記事にするかもしれません。 「特定の文字列を含まない文字列にマッチする」なんて夢のようじゃありませんか。 参考情報 公式ニュース:Ruby 2.4.1 Released 2.4.0以降のコミット: Comparing changes 公式のコミットはmergeばかり並んでいて読みづらいので、RubyFlowの速報も参照しました。Ruby 2.4.1 Onigmoアップデートで非包含演算子が導入Rubyの正規表現エンジンとしておなじみのOnigmoはRubyとは独

GitHub - gfx/ruby-regexp_trie: Optimized Regexpbuilder with Trie (aRuby port ofPerl's Regexp::Trie) # Gemfile gem 'regexp_trie' これははてなキーワードやWikipediaのリンクのように、ある程度の量のテキストに対して大量のキーワードをマッチさせるときに、最適化した正規表現を生成するライブラリです。はてなキーワード*1をとあるブログエントリ*2にマッチさせるための簡単なベンチマークもあります。 example/benchmark.rb 結果: $bundle exec example/benchmark.rb (snip) user system total real Regexpraw 4.270000 0.030000 4.300000 ( 4.3
こんにちは、ミドルウェア開発チームの青木です。 先日、アプリケーションサーバーが応答を返さなくなるトラブルに遭遇しました。 今回はその時のトラブルの原因と対策の顛末についてお話しようと思います。 現象 アプリケーションサーバーが突如応答を返さなくなりました。 現象が発生したアプリケーションサーバーのスタックトレースを見ると、あるスレッドの先頭が上記のようになっていました。 "qtp258153142-514386" prio=10 tid=0x00007f40b8dbf000 nid=0x7b4e runnable [0x00007f415ccb0000]java.lang.Thread.State: RUNNABLE atjava.util.regex.Pattern$Loop.match(Pattern.java:4692) atjava.util.regex.Pattern$G
第50回Ruby/Rails勉強会@関西 に参加して、「正規表現の先読みについて」という発表をしてきました。 発表資料 https://github.com/znz/regexp-201403 http://slide.rabbit-shocker.org/authors/znz/regexp-201403/ https://speakerdeck.com/znz/zheng-gui-biao-xian-falsexian-du-minituite http://www.slideshare.net/znzjp/regexp-201403 デモアプリ デモに使った Web アプリのソースは https://gist.github.com/znz/9835956#file-regexp-201403-rb で公開しています。heroku にも deploy したので、 デモサイト (20
swatmac.info Buy thisdomain. 2020 Copyright. All Rights Reserved. The Sponsored Listings displayed above are served automatically by a third party. Neither the service provider nor thedomain owner maintain any relationship with the advertisers. In case of trademark issues please contact thedomain owner directly (contact information can be found in whois).Privacy Policy
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く