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

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

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

[半田 惇志](https://demo.100inc.co.jp/category-test/author/半田-惇志)  Jun 24, 2021, 12:00:00 AM

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

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

 {%- raw -%}

```
{{ 'ふがhogeピヨ'|split('hoge')|length - 1 }}
↓
1（hogeの出現回数）
```

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

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

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

```
{{ 'hogeふがピヨhogehogeふが'|replace('hoge', '@hoge')|split('hoge')|length - 1 }}
↓
3（hogeの出現回数）
```

そもそもHubLでこういう文字処理などしだすこと自体辛さがあるのですが、かといってしないと先に進めないこともありますので、ご参考までに。  
ちなみに配列であれば、[count関数](https://developers.hubspot.com/docs/cms/hubl/functions#count)が使え、「単に文字列中に特定の単語を含むかどうか」であれば、[string\_containing](https://developers.hubspot.com/docs/cms/hubl/operators-and-expression-tests#string-containing)が使えます。

[CMS Hub](https://demo.100inc.co.jp/category-test/tag/cms-hub)

[CMS Hub](https://demo.100inc.co.jp/category-test/tag/cms-hub)