Php 使用正则表达式确定字符串是否只是单个重复字符
我正在编写一个PHP脚本,现在我需要知道一个字符串是否由一个刚刚重复的字符组成。该字符甚至是一个特定的字符:它是Php 使用正则表达式确定字符串是否只是单个重复字符,php,regex,repeat,Php,Regex,Repeat,我正在编写一个PHP脚本,现在我需要知道一个字符串是否由一个刚刚重复的字符组成。该字符甚至是一个特定的字符:它是z 例如,我想匹配“z”,“zzz”或“zzzzzzz”,但不匹配“zaz”或“aaa” 这可能是一个简单的正则表达式问题,但我不知道如何做到这一点。有人吗?将其与^z*$匹配:开始(^)、任意数量的z*、结束($)您可以创建如下自定义函数: function oneLetter($str){ for($i=1; $i < strlen($str); $i++){
z
例如,我想匹配“z”
,“zzz”
或“zzzzzzz”
,但不匹配“zaz”
或“aaa”
这可能是一个简单的正则表达式问题,但我不知道如何做到这一点。有人吗?将其与
^z*$
匹配:开始(^)、任意数量的z*、结束($)您可以创建如下自定义函数:
function oneLetter($str){
for($i=1; $i < strlen($str); $i++){
if($str[i] != $str[i-1]) return false;
}
return true;
}
函数一个字母($str){
对于($i=1;$i
^zz+$
。。。。。la la 15个字符如果正则表达式吓到了你,你可以使用Harmen proposed之类的函数:
$string = 'zzzzzzzzz';
$check = str_repeat('z', strlen($string));
var_dump($check == $string); // dumps bool(true)
$string = 'zzzzAAAzzz';
$check = str_repeat('z', strlen($string));
var_dump($check == $string); // dumps bool(false)
不需要正则表达式。利用PHP阵列的强大功能:
count(array_unique(str_split($string)))==1
当我检查字符串是否与重复的字符相同时,我会执行以下操作:
if (strlen(count_chars($string, 3)) = 1) return true;
你真的一点都不知道吗?秋波:我已经知道了
[z]+
,但这似乎匹配了任何一个字符串,其中包含多个连续的z
。但这是一个很好的起点。你可以问一个更具体的问题,比如“[z]+
匹配任何只包含一个或多个z
的字符串;如何匹配只包含z
的字符串?”这个问题让我昏昏欲睡…这取决于你想要的空字符串的结果。它应该是^zz+$
,因为要重复它必须发生>=2次。对不起,我应该澄清一下:一个“z”
也应该匹配。(编辑帖子以澄清)更简单:str_replace('z','','$string)==''
谢谢米哈伊尔和约斯特克。我特别喜欢JoostK的解决方案:)鬼鬼祟祟的JoostK:)然后我们可以将它进一步缩小到!str_replace('z',''$string)
已注意并更新。刚刚注意到另一个解决方案:substr\u count($string),'z')==strlen($string)
,我只是想知道为什么我不喜欢它。假设一个字符串为'zzzz0z'
,将变成'0'
en,然后变成!'0'==TRUE
。请务必小心松散的比较。有时字符限制不利于简洁。@PP:没关系,z
也可以匹配。我只想要所有只由z
组成的字符串,所以包括z
本身。我也考虑过这一点,但这似乎不是一个很好的解决方案……即使对于更难的问题,/^(.)\1*$/
或/^(?()\1*)?$/
可以。数组不是比正则表达式搜索更需要处理器吗?@Keng:即使它更慢,如果我们不是说10000次迭代,差异也不会很大