[英]Regular expression for limiting character not working
我想將“ b”的數量限制在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);
?>
但這不起作用。 我究竟做錯了什么?
僅通過正則表達式。
$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]*b){0,6}[^b]*$/
如果您還想計算大寫字母B
的大小,請添加不區分大小寫的修飾符i
。
說明:
^
行首。 ([^b]*b){1,6}
匹配(零個或多個非b字符和a b
)(1到6次)。 因此,這確保必須存在至少1次且最多6次的字符b
。 [^b]*
匹配任何char,但不匹配b
,零次或多次。 這樣可以確保不再存在b
。 $
線邊界的末端.. 嘗試使用匹配計數。
<?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);
?>
我想您想計算整個字符串中B的數量,而您的正則表達式只計算行中的B數。 即“ 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...";
?>
但是,當然,如果您想查看找到的匹配項並不會真正有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.