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++){

我正在编写一个PHP脚本,现在我需要知道一个字符串是否由一个刚刚重复的字符组成。该字符甚至是一个特定的字符:它是
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次迭代,差异也不会很大