CMS Hub

HubLで文字列内の単語の出現回数をカウントする

目次

    例えば「hogeふがピヨhogehogeふが」の文字列において、hogeが何回出て来るか?をカウントする方法です。自分の知る限りHubLにはこれを一発で処理できる関数やフィルタはないので、少し工夫することになります。

    発想としては「hogeの度に何かができれば良さそう」なので、splitフィルタを使います。一旦シンプルな例でいくと、「ふがhogeピヨ」に対してsplitフィルタを使用した場合、次のようになりhogeの出現回数を取得できます。

      
    1. 1
    2. 1(hogeの出現回数)

    分解して解説すると、まず 'ふがhogeピヨ'|split('hoge')['ふが', 'ぴよ'] のリストができます。このリストのlengthから-1した値が、hogeの出現回数になります。

    ただし厄介なのが最初の例で「hogeふがピヨhogehogeふが」に対し |split('hoge') すると、得られるリストは [ふがピヨ, ふが] になります。このリストのlength - 1は1なので、これはhogeの出現回数ではありません。要は行頭・行末の区切り文字や、連続する区切り文字があると期待通りの結果を得られないのです。

    ではどうするかというと、先に区切り文字に何か適当な文字を付加しておきます。そのうえでsplitを行うと、期待通りの結果が得られます。

      
    1. 3
    2. 3(hogeの出現回数)

    そもそもHubLでこういう文字処理などしだすこと自体辛さがあるのですが、かといってしないと先に進めないこともありますので、ご参考までに。
    ちなみに配列であれば、count関数が使え、「単に文字列中に特定の単語を含むかどうか」であれば、string_containingが使えます。

    執筆者:Admin

    関連記事