→データ処理関連
→文字コード関連
- 正規表現の(?=subexpression)って何? 2021.8
- 正規表現の(?=subexpression)は、ゼロ幅の肯定先読みアサーション
- 「マッチの条件には含めるけれど、マッチの範囲はexpressionだけで、その後に続くsubexpressionはマッチの範囲には含めないよ」ということです。
- 正規表現まとめサイト
- かなり使えるPerl正規表現のまとめ 2009.3.22
- よくつかう正規表現はCPANモジュールにはいってるのをつかうのが楽じゃないでしょうか。Perl の場合だと、よくつかう正規表現は CPAN モジュールとしてアップロードされています。
- また、そういったモジュールをまとめて validation library としてつかえるようになっているので、それを見ればいいだけなので、まとめブログとか書く必要はありませんね。
- 楽をしたければ、validation library を素直につかいましょう。
- 正規表現に見切りをつけるとき 2009.1.27
- 正規表現の能力を超えるデータはどう扱えばいいのか?一番のお勧めは、ANTLRを使って字句解析(lexer)、構文解析(parser)するプログラムを生成する方法です。一昔前なら、lex/yacc、flex/bison, JavaCCなどしか選択肢がなかったのですが、今は断然ANTLRが便利です。
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
メールアドレスの形式チェック†
「-99999から99999」までの数字を検索できる正規表現†
> 「-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はマッチしなかった