書式1: regexlen(
,正規表現)
書式2: regexlenw(
,正規表現)
指定した正規表現が最長マッチする文字列
の部分文字列の長さを返す。 マッチしなければ0を返す。すなわち0文字にマッチしたと解釈する。
もしくは正規表現にマルチバイト文字を含む場合はregexlenw関数を使うこと。
正規表現c.*aに最も長くマッチする部分文字列の長さを得る。 マッチした部分文字列についてはregexstrと同じ入力データを使っているので、比較すると分かりやすい。
$ more dat1.csv
id,str
1,xcbbbayy
2,xxcbaay
3,
4,bacabbca
$ mcal c='regexlen($s{str},"c.*a")' a=rsl i=dat1.csv o=rsl1.csv
#END# kgcal a=rsl c=regexlen($s{str},"c.*a") i=dat1.csv o=rsl1.csv
$ more rsl1.csv
id,str,rsl
1,xcbbbayy,5
2,xxcbaay,4
3,,0
4,bacabbca,6
正規表現"あ.*い"に最も長くマッチする部分文字列の長さを得る。 ただし、以下ではマルチバイト文字対応でないregexlen関数を使っているので、 文字数ではなくバイト数を返している。
$ more dat2.csv
id,str
1,漢漢あbbbいyy
2,漢あbいいy
3,
4,bあいあbbいあ
$ mcal c='regexlen($s{str},"あ.*い")' a=rsl i=dat2.csv o=rsl2.csv
#END# kgcal a=rsl c=regexlen($s{str},"あ.*い") i=dat2.csv o=rsl2.csv
$ more rsl2.csv
id,str,rsl
1,漢漢あbbbいyy,9
2,漢あbいいy,10
3,,0
4,bあいあbbいあ,14
正規表現"あ.*い"に最も長くマッチする部分文字列の長さを得る。 regexlenw関数を使うと、正しくマルチバイト文字を扱ってくれる。
$ mcal c='regexlenw($s{str},"あ.*い")' a=rsl i=dat2.csv o=rsl3.csv
#END# kgcal a=rsl c=regexlenw($s{str},"あ.*い") i=dat2.csv o=rsl3.csv
$ more rsl3.csv
id,str,rsl
1,漢漢あbbbいyy,5
2,漢あbいいy,4
3,,0
4,bあいあbbいあ,6