正規表現に実は今まで興味が無かった。
実際に知らなくても特に何も困らなかった。
でもパターンの書き方を何かの言語で覚えてしまえば他で使い回せる。
他の言語はもとより grep コマンドでさえ、と今頃知った。
これは勉強しといたほうが良いかも。
でも使う手段は言語によって違うんだよなぁ。
いっそ GLib で使えればどんな言語でも gir で同じ手段でイケるのに。
Perl-compatible regular expressions: GLib Reference Manual
って普通にあるじゃん、perl と同じってことね。
Gjs でコイツと JavaScript の RegExp を比べてみよう。
画像の拡張子が最後に付いているかを大小文字区別なく探すコード。
#!/usr/bin/gjs
const GLib = imports.gi.GLib;
const ARRAY = ["001.jpg", "002.JPEG", "003.Png", "004.gif", "jpeg.gif"];
const PATTERN = "\.(jpe?g|png)$";
// JavaScript RegExp
ARRAY.forEach(function(s) {
let re = new RegExp(PATTERN, "i");
print(re.test(s));
});
print("----------");
// GLib Regex
ARRAY.forEach(function(s) {
print(GLib.Regex.match_simple(PATTERN, s, GLib.RegexCompileFlags.CASELESS, 0));
});
/* @ Python
import re
for s in ARRAY:
res = True if re.search(PATTERN, s, re.I) else False
print(res)
*/
/* output
true
true
true
false
false
----------
true
true
true
false
false
*/
うん、見事に同じパターンが使えるのね。
コレで Vala だろうが何だろうが同様に使える。
Python は真偽値を戻さず mach Object 自体が True って変。
そりゃ Python なんだから変だと言われても何を今更と思えるのが凄い。