我想知道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
的使用有点令人困惑,如果您需要在一个字符串中匹配相同模式的倍数,那么这不是正确的解决方案。