首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的Regex模式匹配

PHP中的Regex模式匹配
EN

Stack Overflow用户
提问于 2015-05-01 05:39:29
回答 2查看 93关注 0票数 0

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

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

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

代码语言:javascript
复制
$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"; }

找到了解决办法:

代码语言:javascript
复制
$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'; 
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-01 06:20:45

您可以使用斯特波斯检查字符串中的一个单词。

代码语言:javascript
复制
$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的非布尔值。有关更多信息,请阅读有关布尔人的部分。使用===操作符测试此函数的返回值。

票数 1
EN

Stack Overflow用户

发布于 2015-05-01 05:45:10

您需要这样的模式(不完整的,加上.中的剩余月份):

代码语言:javascript
复制
"/^(January|February|March|...|December).*:$/"

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29982131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档