2

我试图找出一个正则表达式模式,它将查看下面的数组并将其中包含“+”的任何匹配替换为 emtpy/null,因此如果其中包含正数,则将其设为 null。

谢谢您的帮助。我还在学习。

Array (
[0] => IND: -3
[1] => NYJ: +0
[2] => BAL: +3
[3] => CLE: +6
[4] => WSH: +5
[5] => DET: -2.5
[6] => ATL: +0
[7] => ARI: -7
[8] => OAK: +7
)

$pattern = '/(?<!A-Z\:)\+/i';
$replacement = '';
$replaced = preg_replace($pattern, $replacement, $line
4

6 回答 6

4

设置为null将取消设置,因此:

$array = preg_grep('/\+/', $array, PREG_GREP_INVERT);
于 2013-11-15T01:10:54.650 回答
2

对于这个问题,您不需要使用正则表达式;strpos会告诉你+字符串中是否有 a 。话虽如此,您可以使用以下方法删除这些事件array_filter

$result = array_filter($array, function($i)
{
    return strpos($i, '+') === false;

});
于 2013-11-15T01:08:58.563 回答
2
array_walk($array, function(&$v){
  $v = (strpos($v,'+')!==false)? null : $v;
});
于 2013-11-15T01:17:05.143 回答
1

正则表达式适用于字符串,而不是数组。遍历数组,执行整数比较并重新分配值可能会更快更简单。

于 2013-11-15T01:06:18.300 回答
1

您可以使用的另一种解决方案。

foreach ($array as $k => $v) {
   if (preg_match('/\+/', $v)) {
     unset($array[$k]);
   }
}

输出

Array
(
    [0] => IND: -3
    [5] => DET: -2.5
    [7] => ARI: -7
)

working demo

于 2013-11-15T01:25:22.317 回答
0

为了获得额外的荣誉,我将如何剥离团队名称后跟“+”。数组看起来像这样。

 Array
(
[0] => IND: -3
TEN: +3
[1] => NYJ: -1
BUF: +1
[2] => BAL: +3
CHI: -3
[3] => CLE: +6
CIN: -6
[4] => WSH: +4.5
PHI: -4.5
[5] => DET: -2.5
PIT: +2.5
[6] => ATL: +1
TB: -1
[7] => ARI: -8.5
JAX: +8.5
[8] => OAK: +9
HOU: -9
[9] => SD: -1.5
MIA: +1.5
[10] => SF: +3
NO: -3
[11] => GB: +4.5
)
于 2013-11-16T01:15:34.333 回答