2016-01-14 3 views
1

Я хочу, чтобы ограничить число «Ъ» от 1 до 6, для которых я использую следующий код:Регулярного выражения для ограничения характера не работают

<?php 
$str="Big black books being kept in a black bag of a beautiful babe"; 
$pattern="/(b){1,6}/"; 
    if(!preg_match($pattern,$str,$matches)) 
{ 
echo "Please use six bs"; 
}else 
{/*do nothing*/} 
print_r($matches); 
?> 

Но это не работает. Что я делаю не так?

+0

вы хотите 6 Б во всей строке или 6 Б в ряд ли? – Wash

+0

@Wash Я хочу 6 b во всей строке. Не в строке, как bbbbbb. – user5237857

ответ

5

Через только регулярное выражение ..

$str="Big black books being kept in a black bag of a beautiful babe"; 
$pattern="/^([^b]*b){1,6}[^b]*$/"; 
    if(!preg_match($pattern,$str,$matches)) 
{ 
echo "Please use upto six bs"; 
}else 
{/*do nothing*/} 
print_r($matches); 

и обратите внимание, что это должно, за исключением по крайней мере один единственный б. Если вы хотите, чтобы соответствовать также линии, которые не имеют какие-либо одного b затем использовать /^([^b]*b){0,6}[^b]*$/

Добавить регистронезависимый модификатор i, если вы хотите, чтобы рассчитывать также на капитал B лет.

Объяснение:

  • ^ начало строки.
  • ([^b]*b){1,6} Он соответствует (ноль или более символов не-b и b) (от 1 до 6 раз). Таким образом, это гарантирует, что должен быть символ b существует мин. 1 раз и максимум 6 раз.
  • [^b]* Соответствует любому знаку, но не b, ноль или более раз. Это гарантирует, что больше не существует b.
  • $ Конец границы линии ..
+0

Это то, что я искал. Спасибо Авинаш Радж. Но можете ли вы ПОЧЕМ пояснить немного о том, к чему это относится? Я имею в виду, что это значит? – user5237857

+0

@ user5237857 проверить мое обновление ...... –

+0

Почему этот код возвращает 'eing b' в 1-м индексе? – user5237857

0

Пробуйте использовать счетчик совпадений.

<?php 
    $str="Big black books being kept in a black bag of a beautiful babe"; 
    preg_match_all("/(b)/i",$str,$matches); 
    if(isset($matches[1]) && count($matches[1]) > 6) 
    { 
     echo "Please use six bs"; 
    }else 
    {/*do nothing*/} 
    print_r($matches); 
?> 
+0

Thats working, но я не могу использовать его с preg_match()? – user5237857

+0

что не так с preg_match_all()? почему вы хотите только preg_match()? – Vegeta

+0

Потому что меня просят сделать это с помощью preg_match(). Это для меня задача. – user5237857

0

Я думаю, вы хотите подсчитать количество Bs во всей строке, в то время как ваше регулярное выражение подсчитывает их только в строках. то есть «bbb» или просто «b» вернет совпадение.

Попробуйте использовать substr_count, чтобы достичь того, что, как я думаю, вы хотите. Вот пример.

<?php 
    $str = "Big black books being kept in a black bag of a beautiful babe"; 
    if(substr_count($str, "b") > 6) 
     echo "Six is the limit..."; 
    else 
     echo "Doing nothing..."; 
?> 

Но, конечно, это не поможет, если вы хотите увидеть найденные совпадения.

+0

Это функция функции строки, я хочу ограничить b с помощью регулярного выражения. Спасибо за ваши усилия. – user5237857

+0

Пользователь5237857 попросил использовать preg_match(). – Vegeta

+0

@ Вегета Я понимаю, что он сказал мне. Но я не вижу упоминания об использовании только регулярного выражения в вопросе. –

Смежные вопросы