好,
所以这是我的代码:
$explode = explode("+ ", $article);
$explode_count = count($explode);
for($i=0;$i<$explode_count;$i++)
{
$numbers = preg_replace('/[^0-9]/', '', $explode[$i]);
$letters = preg_replace('/[^a-zA-Z]/', ' ', $explode[$i]);
if($letters == "All Star Game")
{
echo "Done";
}
}
$ letters变量等于全明星游戏。但是,出于某种原因,“完成”并没有得到回应。可能是preg_replace函数,我用来将数字与字符串中的字母分开?我注意到当我将$ letters变量更改为
时 $letters = preg_replace('/[^a-zA-Z]/', '', $explode[$i]);
并将其余代码设置为:
if($letters == "AllStarGame")
{
echo "Done";
}
然后,php回应它。关于这里的空间发生了什么?
答案 0 :(得分:1)
如果您的输入为+ 1933 All Star Game +
,那么您的正则表达式会将文本片段转换为␣␣␣␣␣␣All␣Star␣Game␣
之类的内容。 (␣
表示空格。)
那是因为你preg_replace('/[^a-zA-Z]/', ' ')
任何带有空格的非字母。因此1933
将变为四个空格,两个周围的空间将保留。这就是为什么$letters == "All Star Game"
的最终比较永远不会匹配的原因。
答案 1 :(得分:0)
这是因为你的正则表达式排除了空格。
$letters = preg_replace('/[^a-zA-Z]/', ' ', $explode[$i]);
// ^ I only accept letters, not spaces
解决办法是忘记正则表达式并按' + '
爆炸。
<?php
$teams = explode(' + ', $article);
foreach ($teams as $team) {
if ($team == "All Star Game") {
echo "Done";
}
}
警告您可能在数组末尾追踪空字符串(结束时您的字符串包含' + '
,但在看到空字符串时您可以轻松break
。