我想知道PHP中的preg_match条件,以检查字符串是否以一个月(1月至12月)开始,是否以冒号(:)结尾。在两者之间,它可以有任何字母、字符或数字。有人能帮忙吗?坚持了一个小时,没有得到正确的结果。
例如,字符串"December 2,&*&98hkjk:"应该返回true。
我得到了使用txt2re.com的月份和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';
}发布于 2015-05-01 06:20:45
您可以使用斯特波斯检查字符串中的一个单词。
$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的非布尔值。有关更多信息,请阅读有关布尔人的部分。使用===操作符测试此函数的返回值。
发布于 2015-05-01 05:45:10
您需要这样的模式(不完整的,加上.中的剩余月份):
"/^(January|February|March|...|December).*:$/"注意,我添加了字符串锚点^和$的开头和结尾,因为您说字符串以一个月开始,以冒号结束。但是您对preg_match_all的使用有点混乱,如果您需要在一个字符串中匹配相同模式的倍数,那么这不是正确的解决方案。
https://stackoverflow.com/questions/29982131
复制相似问题