文字列に一定数の文字が出現するかどうかを確認しようとしています。
例:
$string = '123~456~789~000';
この文字列に正確に 3 つの文字のインスタンスがあるかどうかを確認したいと思います~
。
正規表現を使用してそれは可能ですか?
単一の文字は技術的に部分文字列であり、タスクはその出現回数をカウントすることであるため、最も効率的なアプローチは特別な PHP 関数を使用することにあると思います - substr_count :
$string = '123~456~789~000';
if (substr_count($string, '~') === 3) {
// string is valid
}
明らかに、パターン一致の数をカウントする必要がある場合、このアプローチは機能しません (たとえば、文字列内の '0' の数を でカウントできますが、digitsをカウントするためにsubstr_count
使用することをお勧めします)。preg_match_all
しかし、この特定の質問については、特定の目標 - 部分文字列のカウント -がより普遍的な側にあるsubstr_count
場合に最適化されているため、全体的に高速になるはずです。preg_match_all
)
はい
/^[^~]*~[^~]*~[^~]*~[^~]*$/
説明:
^
...多くの正規表現方言で文字列全体$
を意味します[^~]*
0 個以上の非チルダ文字の文字列~
チルダ文字文字列には、文字列内の任意の場所に表示される必要な数の非チルダ文字を含めることができますが、正確に 3 つのチルダを含める必要があります。
これは可変数の文字で機能するはずです。
^(?:[^~]*~[^~]*){3}$
ここでの利点は、3をチェックしたい数に置き換えるだけであるということです。
それをより効率的にするために、それは次のように書くことができます
^[^~]*(?:~[^~]*){3}$
これはあなたが探しているものです:
以下のコメントに基づいて編集します。
<?php
$string = '123~456~789~000';
$total = preg_match_all('/~/', $string);
echo $total; // Shows 3