正規表現

分類

・Basic Regular Expression Basic RegEx BREs

・Extended Regular Expression Extended RegEx EREs

・Perl Regular Expression Perl RegEx PREs

online testing

https://regex101.com/

Linuxコマンド

正規表現構文

※BREsの場合に、"?,+,|,{,},(,)"の前に'¥'が必要。

Java

簡単な処理はappend, replace, reverse, splitで結構だが、複雑な処理は正規表現で便利

★完全一致

// 書き方1

Pattern pattern = Pattern.compile(パターン);

Matcher matcher = pattern.matcher(対象文字列);

// 検査結果

boolean result = matcher.matches();

// 書き方2

boolean result = Pattern.matches(パターン, 対象文字列);

★部分一致

// パターン:定価(\\d+)円 括弧はポイント

while( matcher.find() ) { // 合致するものをすべて取得

String rlt = target.subString(matcher.start(), matcher.end());

...

}

// パターン:定価(\\d+)円 括弧はポイント

if( matcher.find() ) {

String rlt = matcher.replaceFirst("xxx");

String rlt = matcher.replaceAll("xxx");

...

// 定価1000円⇒1000円(定価)

String rlt = matcher.replaceAll(matcher.group(1) + "円(定価)");

}

// 数字を抽出

List<Integer> numbers = new LinkedList<Integer>();

Pattern p = Pattern.compile("\\d+");

Matcher m = p.matcher(str);

while (m.find()) {

numbers.add(Integer.parseInt(m.group()));

}

String lines[] = String.split("\\r?\\n"); //改行

String.split("[\\r\\n]+") //空行を除く

String.split(System.getProperty("line.separator")); //空行を含む

String line = " a b c d ";

System.out.println(line.replaceAll("[\\s]+", " "));// " a b c d "

".{3,6}" 任意文字で3文字以上6文字以下

"[a-zA-Z0-9]{3,6}" 半角英数字で3文字以上6文字以下

"[^'¥",]+" 記号('",)を含まない

"[0-9]{3}-[0-9]{4}" 郵便番号かどうか

"¥¥d{2,4}-¥¥d{2,4}-¥¥d{4}" 電話番号かどうか

"[¥¥w-]+@[¥¥w-][.¥¥w]+" メールアドレスかどうか

// 完全一致

"a,bc,".matches("[a-z],[a-z]{2},")

あるいは

Pattern pattern = Pattern.compile("[a-z],[a-z]{2},");

pattern.matcher("a,bc,").matches()

Pattern pattern = Pattern.compile("[a-z],[a-z]{2},", Pattern.CASE_INSENSITIVE);

pattern.matcher("A,BC,").matches()

// 埋め込みフラグ

"A,BC,".matches("(?i)[a-z],[a-z]{2},")

// 部分一致

pattern.matcher("0a,bc,123").find()

JavaScript

var s = "andy@xxx.com";

var rs = s.match(/(.+?)@xxx(.com)/);

console.log(RegExp.$1); // andy

console.log(RegExp.$2); // .com

// タグの中身を抽出する

var s = "<title>xxx</title>";

var rs = s.match(/<title>([^<]+)<\/title>/);

console.log(RegExp.$1); // xxx

// 日付を変換

var s = "2013-08-10";

var rs = s.match(/(\d{4})[-\/](\d{2})[-\/](\d{2})/);

console.log(RegExp.$1+'年'+RegExp.$2+'月'+RegExp.$3+'日'); // 2013年08月10日