preg_replace无法正常工作?

时间:2012-06-02 11:20:45

标签: php whitespace

好,

所以这是我的代码:

        $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回应它。关于这里的空间发生了什么?

2 个答案:

答案 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