Используйте регулярное выражение, чтобы узнать, является ли строка одним повторяющимся символом
Я пишу сценарий PHP, и на данный момент мне нужно знать, состоит ли строка из одного символа, который только что повторился. Персонаж даже конкретный: это z
,
Например, я хочу соответствовать "z"
, "zzz"
или же "zzzzzzzzz"
но нет "zaz"
или же "aaa"
,
Вероятно, это простой вопрос регулярных выражений, но я понятия не имею, как это сделать. Кто-нибудь?
6 ответов
Решение
Сопоставьте это с ^z*$
: начало (^), любое количество z (z*), конец ($)
Если регулярное выражение вас пугает - вы можете использовать функцию, подобную предложенной Харменом, или что-то вроде:
$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;
Вы можете создать пользовательскую функцию, например так:
function oneLetter($str){
for($i=1; $i < strlen($str); $i++){
if($str[i] != $str[i-1]) return false;
}
return true;
}