#author("2023-05-18T12:02:17+09:00","default:irrp","irrp") →データ処理関連 →Perl関連 →文字コード関連 →自然言語処理/全文検索 →文字コード関連 #contents *一般 [#cf3a163c] -[[正規表現の奥深さ - ROBOT PAYMENT TECH-BLOG>https://tech.robotpayment.co.jp/entry/2023/05/18/070000]] 2023.5 --肯定先読み、否定先読みなど -[[シンプル図解: 正規表現の (?= ) とか (?! ) とか (?<= ) とか (?<! ) とか - Qiita>https://qiita.com/pal4de/items/7e2292cfd7ac424e0836]] 2022.12 -[[正規表現入門決定版 - Qiita>https://qiita.com/nuco_bk/items/d48d763b205017f914ae]] 2022.12 -https://www.regexpal.com/ --正規表現を試せるサイト -[[覚えれば一生もの! ウェブエンジニアのための正規表現活用入門 - ICS MEDIA>https://ics.media/entry/221020/]] 2022.10 -[[[正規表現] .*?は最短マッチではない - Qiita>https://qiita.com/anqooqie/items/191ad215e93237c77811]] 2017 -[[ノイズが多いテキストを対象にした正規表現を書きやすくするPythonモジュール regex - Techブログ - MNTSQ, Ltd.>https://tech.mntsq.co.jp/entry/2022/08/03/184158]] 2022.8 -[[【Tech Talk 動画紹介】高度な正規表現は文字化けと区別がつかない件について - エムスリーテックブログ>https://www.m3tech.blog/entry/2022/05/13/100000]] 2022.5 --部分式, BNF -[[正規表現の「正規」とは - カレーなる辛口Javaな加齢日記>https://javablack.hatenablog.com/entry/20211031/1635684165]] 2021.11 --誤訳だという話 -[[正規表現の(?=subexpression)って何?>https://qiita.com/gushwell/items/11968b1e6d0f644c8c69]] 2021.8 --正規表現の(?=subexpression)は、ゼロ幅の肯定先読みアサーション --「マッチの条件には含めるけれど、マッチの範囲はexpressionだけで、その後に続くsubexpressionはマッチの範囲には含めないよ」ということです。 -[[正規表現における「名前付き文字クラス」>https://atmarkit.itmedia.co.jp/fdotnet/dotnettips/054iskana/iskana.html]] 2003 --.NET Frameworkの正規表現クラスでは、ひらがなやカタカナの文字コードの範囲(ブロック)を定義している「名前付き文字クラス」と呼ばれるものがサポートされている。これを利用すれば文字列のひらがな/カタカナを簡単に調べることができる。 \p{IsHiragana} \p{IsKatakana} \p{IsCJKUnifiedIdeographs} -[[正規表現における$1を使った部分置換の方法>https://uxmilk.jp/50944]] 2016.4 -[[講座『正規表現』>http://homepage2.nifty.com/mozu/koza/regul_koza.htm]] --「すべての漢字から一文字」のパターンは[亜-龠] -[[正規表現まとめサイト>http://journal.mycom.co.jp/news/2009/06/05/046/index.html]] -[[かなり使えるPerl正規表現のまとめ>http://d.hatena.ne.jp/tokuhirom/20090321/1237629165]] 2009.3.22 --よくつかう正規表現はCPANモジュールにはいってるのをつかうのが楽じゃないでしょうか。Perl の場合だと、よくつかう正規表現は CPAN モジュールとしてアップロードされています。 --また、そういったモジュールをまとめて validation library としてつかえるようになっているので、それを見ればいいだけなので、まとめブログとか書く必要はありませんね。 --楽をしたければ、validation library を素直につかいましょう。 -[[regexp - 'test@[127.0.0.1' . "\\\x1f]" はRFC2822準拠>http://blog.livedoor.jp/dankogai/archives/51190099.html]] 2009.3.20 -[[「danコガいはもう正規表現をblogに書くな」と言わせないでくれ>http://www.geminium.com/chiba_blog/2009/03/20/151/]] 2009.3.20 -[[PHP使いはもう正規表現をblogに書くな」と言わせないでくれ>http://blog.livedoor.jp/dankogai/archives/51189905.html]] 2009.3.19 --メールアドレスの正規表現が一筋縄では行かないことは、ちょっとぐぐればすぐに出てくるし、しかも正規表現でマッチできるのはたかだか nobody@example.com、すなわちaddr-specまでで、From: Anonymous <nobody@example.com>、すなわちmailboxを正規表現でマッチするのは不可能なのはもう10年以上前から知られている --Jeffrey E. F. Friedl氏原著による 「詳説 正規表現」にはメールアドレスはネストした コメントを持つことができるので正規表現で表わすのは不可能であると 書いてあります -[[正規表現に見切りをつけるとき>http://leoclock.blogspot.com/2009/01/blog-post_27.html]] 2009.1.27 --正規表現の能力を超えるデータはどう扱えばいいのか?一番のお勧めは、ANTLRを使って字句解析(lexer)、構文解析(parser)するプログラムを生成する方法です。一昔前なら、lex/yacc、flex/bison, JavaCCなどしか選択肢がなかったのですが、今は断然ANTLRが便利です。 -[[Ruby正規表現の使い方>http://www.rubylife.jp/regexp/index.html]] -[[サルにもわかる正規表現入門>http://www.mnet.ne.jp/~nakama/]] -[[Regular Expression Information:http://www.4guysfromrolla.com/webtech/RegularExpressions.shtml]] -[[.NETでの正規表現の使用方法:http://japan.internet.com/developer/20050822/28.html]] -[[Perl6 Rules(新たな正規表現):http://www9.ocn.ne.jp/~ymt/perl6/rules.html]] *JavaScriptでの正規表現 [#i2d3a991] -[[[JavaScript] Unicode文字かどうかを判定する正規表現 | DevelopersIO>https://dev.classmethod.jp/articles/javascript-unicode-reg-exp/]] 2022.10 -[[【JavaScript】正規表現まとめ - Qiita>https://qiita.com/y-suzu/items/12897c296756d5a9a28c]] 2022.10 -[[【JavaScript】初学者「正規表現の学習ってなんとなく避けてきた…」って人のために - Qiita>https://qiita.com/Naughty1029/items/b9f5d04d0bed99577124]] 2022.8 *Javaでの正規表現使用例 [#p15738d4] import java.util.regex.Matcher; import java.util.regex.Pattern; ... public void testMatch() { final Pattern pat = Pattern.compile(@^([^;]*)(.*);(e*)hoge(f*)"); String s = @abc;eehogeff"; Matcher mat = pat.matcher(s); if (mat.find()) { for(int i = 0; i <= mat.groupCount(); i++) { System.out.println("line=" + mat.group(i).trim(); } } } 【実行結果】 line=abc;eehogeff line=abc line= line=ee line=ff *C#での正規表現使用例 [#u510d3e6] -以下の名前空間を使う using System.Text.RegularExpressions; -5桁の数値か? Regex re = new Regex(@"\d{5}"); if( re.IsMatch(チェックしたい文字列) ) { //マッチした } *メールアドレスの形式チェック [#x68efca0] -[[PHPでメールアドレスを確認する「正しい方法」>http://d.hatena.ne.jp/j0hn/20070602]] -[[メールアドレスかどうか調べる>http://phpspot.net/php/pg%90%B3%8BK%95%5C%8C%BB%81F%83%81%81%5B%83%8B%83A%83h%83%8C%83X%82%A9%82%C7%82%A4%82%A9%92%B2%82%D7%82%E9.html]] -言語はPHP function isValid_EMAILADDR($addr) { return ( eregi("^([a-z0-9_]|\\-|\\.|\\+)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", strtolower($addr)) ? TRUE : FALSE); } *「-99999から99999」までの数字を検索できる正規表現 [#p0d0ebf7] > 「-99999から99999」までの数字を検索できる正規表現知ってます? > > マイナスで悩んでます。 > 今のところ-999はOKだが999-も検索しちゃいます。これはダメなんです。 #----(サンプル開始)-------------- use strict; &test_string('0'); &test_string('-0'); &test_string('0-'); &test_string('-'); &test_string('-123'); &test_string('123'); &test_string('123-'); &test_string('999999-'); &test_string('-999999'); &test_string('999999'); &test_string('9999999'); sub test_string { my $s = $_[0]; if( $s =~ /^-?[0-9]{1,6}$/g ){ print $s . "はマッチした\n"; } else{ print $s . "はマッチしなかった\n"; } } #----(サンプルここまで)-------------- 【実行結果】 0はマッチした -0はマッチした 0-はマッチしなかった -はマッチしなかった -123はマッチした 123はマッチした 123-はマッチしなかった 999999-はマッチしなかった -999999はマッチした 999999はマッチした 9999999はマッチしなかった