簡體   English   中英

限制字符的正則表達式不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM