我正在尝试检查字符串是否有一定数量的字符出现。
示例:
$string = '123~456~789~000';
我想验证此字符串是否恰好有3个字符~
的实例。
使用正则表达式可以吗?
答案 0 :(得分:5)
是
/^[^~]*~[^~]*~[^~]*~[^~]*$/
说明:
^
... $
表示许多正则表达式方言中的整个字符串 [^~]*
一串零个或多个非波形字符~
代字号字符串可以根据需要包含任意数量的非波形字符,出现在字符串中的任何位置,但必须具有正好三个波浪,不多也不少。
答案 1 :(得分:4)
由于单个字符在技术上是一个子字符串,并且任务是计算其出现次数,我想最有效的方法在于使用特殊的PHP函数 - substr_count:
$string = '123~456~789~000';
if (substr_count($string, '~') === 3) {
// string is valid
}
显然,如果您需要计算模式匹配的数量(例如,虽然您可以使用substr_count
计算字符串中'0'的数量,这种方法将无法使用,您最好使用{{ 1}}计算位数)。
然而对于这个具体问题,它应该更快整体,因为preg_match_all
针对一个特定目标进行了优化 - 计算子字符串 - 当substr_count
更多地在通用方面时。 )
答案 2 :(得分:2)
我相信这适用于可变数量的字符:
^(?:[^~]*~[^~]*){3}$
这里的优点是你只需要用你想要检查的许多人来替换3。
为了提高效率,可以将其写成
^[^~]*(?:~[^~]*){3}$
答案 3 :(得分:0)
这就是你要找的东西:
编辑基于以下comment:
<?php
$string = '123~456~789~000';
$total = preg_match_all('/~/', $string);
echo $total; // Shows 3