正規表現
分類
・Basic Regular Expression Basic RegEx BREs
・Extended Regular Expression Extended RegEx EREs
・Perl Regular Expression Perl RegEx PREs
online testing
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日