Previous: randi 整数一様乱数 Up: mcal Next: regexm 全体マッチ MCMD2
MCMD2 : mcal : regexlen マッチ文字数

4.79 regexlen マッチ文字数

書式1: regexlen($str$,正規表現)

書式2: regexlenw($str$,正規表現)

指定した正規表現が最長マッチする文字列$str$の部分文字列の長さを返す。 マッチしなければ0を返す。すなわち0文字にマッチしたと解釈する。 $str$もしくは正規表現にマルチバイト文字を含む場合はregexlenw関数を使うこと。

利用例

例1: 基本例

正規表現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

例2: マルチバイト文字

正規表現"あ.*い"に最も長くマッチする部分文字列の長さを得る。 ただし、以下ではマルチバイト文字対応でない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

例3: マルチバイト文字2

正規表現"あ.*い"に最も長くマッチする部分文字列の長さを得る。 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
Previous: randi 整数一様乱数 Up: mcal Next: regexm 全体マッチ MCMD2