繁体   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