<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>正規表現 on akky@サイボウズラボ・ブログ</title>
		<link>https://labs.cybozu.co.jp/blog/akky/tags/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE/</link>
		<description>Recent content in 正規表現 on akky@サイボウズラボ・ブログ</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Sun, 10 Jul 2022 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://labs.cybozu.co.jp/blog/akky/tags/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Autoregex.xyz - 英語で書いた文章から正規表現を作る変換サービス</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/07/autoregex-converts-english-to-regex/</link>
				<pubDate>Sun, 10 Jul 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/07/autoregex-converts-english-to-regex/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.autoregex.xyz/home&#34;&gt;AutoRegex&lt;/a&gt;は、英語から正規表現への変換をしてくれるというwebサービスです。&lt;/p&gt;&#xA;&lt;p&gt;トップには「平易な英文からGPT-3を使って正規表現を生成します」とあります。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.autoregex.xyz/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/07/autoregex-converts-english-to-regex/autoregex-xyz-top_hu_ac68c6348fb38266.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/07/autoregex-converts-english-to-regex/autoregex-xyz-top_hu_e5804c84688e9ded.webp 768w, https://labs.cybozu.co.jp/blog/akky/2022/07/autoregex-converts-english-to-regex/autoregex-xyz-top_hu_8407bb67ef0e51c8.webp 864w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/07/autoregex-converts-english-to-regex/autoregex-xyz-top.png&#34; width=&#34;864&#34; height=&#34;869&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;autoregex.xyz のトップ&lt;/p&gt;&#xA;&lt;p&gt;メールアドレスで登録して試してみました。&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;phone number&amp;quot;と入れて出てきたのはこんな正規表現。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;\d{3}-\d{3}-\d{4}&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;北米の番号としてはありうる正規表現かな。文字と桁だけチェックできて、形式も限定されていますが。(参考: &lt;a href=&#34;https://stackoverflow.com/a/25298604/610853&#34;&gt;まじめな正規表現の例&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Japanese phone number&amp;rdquo; だとこれが帰りました。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;^\d{2}-\d{4}-\d{4}$&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;うん。だめですねこれ。携帯電話の番号とか地方の局番とかはマッチしなさそう。あと先ほどはなかった行頭行末の条件が増えています。&lt;/p&gt;&#xA;&lt;p&gt;中身がどう動いているかわかりませんが、正規表現とその解説文(英文)をたくさん食わせて学習させてるということだと、その中の日本の電話番号に関する情報が間違ってるのかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;正規表現でよく揉める難しいやつ、&amp;ldquo;email address&amp;quot;を入れると、&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;はい。これはもともと簡単そうに見えて&lt;a href=&#34;http://www.din.or.jp/~ohzaki/mail_regex.htm&#34;&gt;非常に難しい問題&lt;/a&gt;なのですが、かなり緩い正規表現になっています。簡易なチェックに使うのも問題ありそう。&lt;/p&gt;&#xA;&lt;p&gt;トップページの例は英文で説明的に書いたものを正規表現化するものが多いので、こういうのも試しました。&amp;ldquo;word starts either a or b, then any alphabet follows, and ends with three digits&amp;rdquo;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;^(a|b)[a-zA-Z]{3}[0-9]{3}$&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;言ってない条件が入ってますが、大きくは違ってないかと。&lt;/p&gt;&#xA;&lt;p&gt;変換ボタンをもう一度押すと、出てくる正規表現は変わっていくようです。何回も試す事でより正解に近い正規表現が得られることもあるかもしれませんが、現時点では出てきた正規表現を理解して意図通りになってることを確認・必要に応じて修正するとか、大量にテストケースを書いてテストするとか(まあ、これは自分で作った正規表現でもすることですが)しないといけなさそうに思います。&lt;/p&gt;&#xA;&lt;p&gt;現時点では利用には十分注意した方がいいと思いますが、いつか賢くなっていくなら助かる人もいそうなサービスです。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://www.reddit.com/r/programming/comments/vufpkg/its_2022_we_shouldnt_have_to_write_regex_by_hand/&#34;&gt;reddit&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Regexアドベンチャー - 正規表現で戦うダンジョンRPG</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/</link>
				<pubDate>Mon, 06 Jun 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://goldenlion5648.itch.io/regex-adventure&#34;&gt;Regex Adventure&lt;/a&gt; は、正規表現を解くことで進むことができるゲームアプリです。&lt;/p&gt;&#xA;&lt;p&gt;[追記 7/4] &lt;a href=&#34;https://goldenlion5648.itch.io/regex-adventure-browser&#34;&gt;デモ版がブラウザで遊べるように&lt;/a&gt;なっていました。やはりブラウザで遊べると敷居が下がりますね。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://goldenlion5648.itch.io/regex-adventure&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-title_hu_b2e0cf63811d191f.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-title_hu_c1d0edf3bc320225.webp 768w, https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-title_hu_930c0049ed33381b.webp 836w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-title.png&#34; width=&#34;836&#34; height=&#34;603&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Regex Adventure サイトトップ&lt;/p&gt;&#xA;&lt;p&gt;Windows / Linux / Mac 版が用意されているアプリは、レベル8 まで遊べる無料のデモ版と、追加で20面以上のレベルを含んだ$6.99 の有料版がダウンロード可能です。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://goldenlion5648.itch.io/regex-adventure&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-tutorial-combat_hu_da09ed700fa2c225.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-tutorial-combat_hu_af847676ca699b17.webp 768w, https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-tutorial-combat_hu_200c96c3c95dca23.webp 780w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-tutorial-combat.png&#34; width=&#34;780&#34; height=&#34;349&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Regexアドベンチャー チュートリアル面&lt;/p&gt;&#xA;&lt;p&gt;デモ版で遊んでみました。各レベルの目的は迷宮のゴールを目指す事。カーソルキーで上下左右に移動し、接敵したら Enter キーで戦闘モードに入ります。&lt;/p&gt;&#xA;&lt;p&gt;攻撃は敵モンスターの名前に対して、マッチする正規表現を入力することで行われます。ただし、正規表現として入力できる記号は大きく制限されています。ダンジョンの途中で紫色のオーブを拾うことで使える記号が増えることもあります。&lt;/p&gt;&#xA;&lt;p&gt;例えば、&amp;ldquo;ant&amp;rdquo; という名前の敵を倒すのに&amp;quot;.&amp;ldquo;と&amp;quot;a&amp;quot;のオーブだけを持っていれば、&amp;rdquo;&amp;hellip;&amp;ldquo;とか&amp;quot;a..&amp;ldquo;といった入力でなければ相手にダメージを与えることができません。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://goldenlion5648.itch.io/regex-adventure&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-tutorial-combat-2_hu_4ca529ff42b93ed1.webp 377w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-tutorial-combat-2.png&#34; width=&#34;377&#34; height=&#34;307&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;戦闘の様子&lt;/p&gt;&#xA;&lt;p&gt;複数の敵と接敵した場合、それらに共通する正規表現を作ることができれば、複数攻撃となります。複数攻撃しないと、生き残った敵の反撃をうけてしまいます。&lt;/p&gt;&#xA;&lt;p&gt;また、敵の近くに味方が配置されている場合、味方の名前も該当してしまうような正規表現で攻撃すると、味方に流れ弾が当たってしまいます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://goldenlion5648.itch.io/regex-adventure&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-tutorial-combat-3_hu_ad437e96facb4cb4.webp 450w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/06/rpg-let-you-fight-by-regex/regex-adventure-tutorial-combat-3.png&#34; width=&#34;450&#34; height=&#34;446&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;味方を攻撃せずに相手にだけダメージを与えるには&lt;/p&gt;&#xA;&lt;p&gt;流れ弾を当てないように、手持ちのオーブを使って正規表現を組み立てなければならず、レベルを上げていくごとに新しい正規表現の使い方を増やしていけないと、勝つのが難しくなっていくというわけです。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://www.reddit.com/r/programming/comments/v4pq3c/people_seem_to_fear_regex_so_i_made_a_puzzle_game/&#34;&gt;reddit/programming&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;関連&#34;&gt;関連&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://localhost:8099/2016/11/regexone-interactive-regular-expression-tutorial/&#34;&gt;RegexOne – 正規表現を段階的に学べるインタラクティブ・チュートリアル&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>iHateRegex - 正規表現サンプル集&#43;構文図</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2020/01/ihateregex-regex-cheatsheet/</link>
				<pubDate>Fri, 31 Jan 2020 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2020/01/ihateregex-regex-cheatsheet/</guid>
				<description>&lt;p&gt;iHateRegex は、正規表現のチートシートサイトです。&lt;/p&gt;&#xA;&lt;p&gt;URLや日付、メールなどよく使われる正規表現はトップページに並べられていて、ワンクリックで&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;正規表現&lt;/li&gt;&#xA;&lt;li&gt;サンプル入力とマッチした箇所&lt;/li&gt;&#xA;&lt;li&gt;構文図&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;を見ることができます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ihateregex.io/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2020/01/ihateregex-regex-cheatsheet/ihateregex-screenshot_hu_7bcc1e37e0689364.webp 480w, https://labs.cybozu.co.jp/blog/akky/2020/01/ihateregex-regex-cheatsheet/ihateregex-screenshot_hu_52d5f959753f5a5d.webp 768w, https://labs.cybozu.co.jp/blog/akky/2020/01/ihateregex-regex-cheatsheet/ihateregex-screenshot_hu_3476a1b90a7e6f53.webp 1085w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2020/01/ihateregex-regex-cheatsheet/ihateregex-screenshot.png&#34; width=&#34;1085&#34; height=&#34;747&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;構文図を見ながら正規表現やサンプルデータを書き換えることで、その正規表現の理屈をいろいろと試して学習することができます。&lt;/p&gt;&#xA;&lt;p&gt;また、それ以外の正規表現についても用途を入力することで(あれば)検索されます。&lt;/p&gt;&#xA;&lt;p&gt;email(シンプルと複雑と2バージョンあります)のように正しさを追求しだすとたいへんな作業になるもの、ssn(アメリカのマイナンバー的な番号)やphone など地域が違えば正規表現も異なるだろうもの、などいろいろと突っ込みどころもありたいへんそうなサービスですが、世の中によくある形式に対する正規表現は個々人がその場で考えるよりも広く考え抜かれたものを採用したほうが良いと思いますし、こういうサービスが定番として使われるといい影響があるかなと思います。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/geongeorge/i-hate-regex&#34;&gt;サイトのソースも公開&lt;/a&gt;されていて、新しいtipを定義して追加依頼を掛けることもできます。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=22200584&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>RegexOne - 正規表現を段階的に学べるインタラクティブ・チュートリアル</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/</link>
				<pubDate>Fri, 04 Nov 2016 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://regexone.com/&#34;&gt;RegexOne&lt;/a&gt;は、クイズ形式で合致する正規表現を見つけると次に進める、という形のオンラインのチュートリアルサイトです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-problem.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-problem_hu_5f312bb0eac444bb.webp 480w, https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-problem_hu_2e1e66f00a1c7741.webp 714w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-problem.png&#34; width=&#34;714&#34; height=&#34;350&#34; alt=&#34;regexone-problem&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;いくつかのマッチさせるべき(MATCH)、あるいはマッチさせるべきでない(SKIP)テキストと、抜き出さないといけないテキストが提示され、それを満たすような正規表現をフィールドに書いていくと、その場でマッチした箇所が変化していきます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-finish.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-finish_hu_612354b193c9133.webp 480w, https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-finish_hu_c43d52acc2fcd37c.webp 768w, https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-finish_hu_7569957106a7aa43.webp 1023w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-finish.png&#34; width=&#34;1023&#34; height=&#34;734&#34; alt=&#34;regexone-finish&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;少しずつ違う正規表現を覚えられるように出題されていくレッスンと、それを終えた人のためのさらなる練習問題があります。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-problem-1.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-problem-1_hu_60b19a18a8122620.webp 480w, https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-problem-1_hu_69c6293ba8cac2b1.webp 700w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2016/11/regexone-interactive-regular-expression-tutorial/regexone-problem-1.png&#34; width=&#34;700&#34; height=&#34;369&#34; alt=&#34;regexone-problem-1&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;その場の問題をしのぐために検索した正規表現を使ってそのまま、という仕事のやり方だといつか痛い目に遭うので、段階的に正規表現の基礎を身に着けたい人にはいいかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;via Hacker News&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
