正規表現入門 †
概要・事前準備 †
- 主な用途はエラーチェック
- 今回はJavaScriptを利用
はじめての正規表現 †
<!DOCTYPE=html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>正規表現の勉強</title>
</head>
<body>
<script>
var s = '@taguchi, @fkoji, @dotinstall';
var rs = s.match(/taguchi/);
if (rs) {
console.log('マッチしました!');
// Webコンソールに出力
}
</script>
</body>
</html>
メタ文字 †
// [abc] -> abcの任意一文字
// [a-z] -> aからz
// [^abc] -> abc以外
// . -> 任意の一文字
var rs = s.match(/t.guchi/);
var rs = s.match(/t...../);
// ^ -> 行頭
var rs = s.match(/^@taguchi/);
// $ -> 行末
var rs = s.match(/@dotinstall$/);
// {} -> 直前の文字の繰り返す回数
// 0{2} -> 00
// 0{2,} -> 2文字以上 -> 00, 000, 0000000
// 0{2,4} -> 2文字以上4文字以内 -> 00, 000, 0000
// [a-z]{5} -> aからzの5文字
// [a-z]{3,6} -> aからzの3文字以上6文字以内
// a? -> 0 or 1 -> , a
// a* -> 0 or more -> , a, aaaaa, aaaaaaaaa
// a+ -> 1 or more -> a, aaa, aaaaaa, aaaaaaa
// (abc)* -> , abc, abcabc
// | -> or
// (abc|def) -> abc, def
// \n -> 改行
// \t -> タブ
// \d -> 数字 [0-9]
// \w -> 英数字_ [A-Za-z0-9_]
// \s -> スペース, タブ
// \メタ文字 -> メタ文字をパターンマッチさせたい場合
// フラグ=オプション
// i -> 大文字小文字を区別しない
var rs = s.match(/taguchi/i); // taguchi, Taguchi, TAGUCHI
// g -> すべてのマッチした要素を配列で返す
var rs = s.match(/a/g);
// m -> 複数行に対応させる -> ^ $
// * + のあとの ? -> 最小マッチをさせる
// +? *?
var s = 'taguchi@dotinstall.com, fkoji@dotinstall.com, adming@dotinstall.com';
var rs = s.match(/.+@dotinstall.com/);
var rs = s.match(/.+?@dotinstall.com/);
// () RegExp -> マッチした文字列を抽出する時に使用
var s = 'taguchi@dotinstall.com';
var rs = s.match(/(.+?)@dotinstall.com/);
console.log(RegExp.$1); // 直前にマッチした括弧内の文字列の1個目を出力
ツイッターIDをマッチさせる †
<!DOCTYPE=html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>正規表現の勉強</title>
</head>
<body>
<script>
// ツイッターID
var s = '@taguchi';
var rs = s.match(/(@[A-Za-z0-9_]{1,15})/);
console.log(RegExp.$1);
</script>
</body>
</html>
"@taguchi"
タグの中身を抽出する †
// タイトルタグ
var s = '<title>ドットインストール</title>';
var rs = s.match(/<title>([^<]+)<\/title>/); // 終端の<ではない1文字以上の繰り返し
console.log(RegExp.$1);
"ドットインストール"
日付を変換する †
// 日付を日本語表記になおす
var s = '2012-03-24'; // 2012年03月24日
var rs = s.match(/(\d{4})[-\/](\d{2})[-\/](\d{2})/);
console.log(RegExp.$1+'年'+RegExp.$2+'月'+RegExp.$3+'日');
"2012年03月24日"
文字列置換(Atom) †
=$D8+$F8+$H8+$J8+$L8+$N8
=$D19+$F19+$H19+$J19+$L19+$N19
=$D30+$F30+$H30+$J30+$L30+$N30
=$D42+$F42+$H42+$J42+$L42+$N42
=$D43+$F43+$H43+$J43+$L43+$N43
=$D44+$F44+$H44+$J44+$L44+$N44
=$P8+$R8+$T8+$V8+$X8+$Z8
=$P19+$R19+$T19+$V19+$X19+$Z19
=$P30+$R30+$T30+$V30+$X30+$Z30
=$P42+$R42+$T42+$V42+$X42+$Z42
=$P43+$R43+$T43+$V43+$X43+$Z43
=$P44+$R44+$T44+$V44+$X44+$Z44
^=\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})
=$P$1+$R$2+$T$3+$V$4+$X$5+$Z$6