→データ処理関連

→Perl関連

#contents

*一般 [#cf3a163c]
-[[正規表現の「正規」とは - カレーなる辛口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]]



*Tool [#rf023159]
-[[正規表現を試すVisual REGEXP>http://www.moongift.jp/2008/03/visual_regexp/]]



*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はマッチしなかった

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS