PHP 中的正则表达式模式匹配



我想知道PHP中的preg_match条件,以检查字符串是否以月份(1月至12月)开头并以冒号(:)结尾。在两者之间,它可以有任何字母、字符或数字。有人可以帮忙吗?卡了一个小时,没有得到正确的结果。

例如,字符串"December 2,&*&98hkjk:"应返回 true。

我使用 txt2re.com 获得了 Month 和 Colon 的模式,但我不知道如何形成它并测试结果。

$txt='May k!ur2!3:';
  $re1='((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))';   # Month 1
  $re2='.*?';   # Non-greedy match on filler
  $re3=':'; # Uninteresting: c
  $re4='.*?';   # Non-greedy match on filler
  $re5='(:)';   # Any Single Character 1
  if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5."/is", $txt, $matches))
  {
      $month1=$matches[1][0];
      $c1=$matches[2][0];
      echo "Matched n";
  }
  else { echo "No match"; }

得到解决方案:

$txt=$_POST['wtfb'];
        $re1='((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))'; # Month 1
        $re4='.*?'; # Non-greedy match on filler
        $re5='(:)'; # Any Single Character 1
        if ($c=preg_match_all ("/".$re1.$re4.$re5."/is", $txt, $matches))
        {
            $month1=$matches[1][0];
            $c1=$matches[2][0];
            echo 'Match';
        }
        else 
        { 
            echo 'No match'; 
        }

您可以使用 strpos 检查字符串中的单词。

$str = "December 2,&*&98hkjk:";
//Check for `December`
if(strpos($str, 'December') !== false) { // use === for type comparison 
   //do your stuff
    echo 'Match';
}else{
    echo 'No Match';
}

为此strpos()更简单的解决方案。

此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。请阅读布尔值部分以获取更多信息。使用 === 运算符测试此函数的返回值。

你想要这样的模式(不完整,在...中添加剩余的月份):

"/^(January|February|March|...|December).*:$/"

注意 我添加了字符串锚点的开头和结尾^$因为您说字符串以月开头并以冒号结尾。但是您对preg_match_all的使用有点令人困惑,如果您需要在一个字符串中匹配相同模式的倍数,那么这不是正确的解决方案。

最新更新