-1

我想从通过循环运行的一组字符串中删除所有括号。我见过的最好的方法是使用 preg_replace()。但是,我很难理解模式参数。

以下是循环

    $coords= explode (')(', $this->input->post('hide'));
        foreach ($coords as $row)
        {
            $row = trim(preg_replace('/\*\([^)]*\)/', '', $row));
            $row = explode(',',$row);
            $lat = $row[0];
            $lng = $row[1];
        }

这就是“隐藏”的价值。

    (1.4956873362063747, 103.875732421875)(1.4862491569669245, 103.85856628417969)(1.4773257504016037, 103.87968063354492)

据我所知,这种模式是错误的。我从另一个线程得到它,我试图阅读模式但无法得到它。我的时间很短,所以我在这里发布了这个,同时也在网络的其他部分寻找其他方式。有人可以为我提供正确的模式吗?或者有更简单的方法吗?

编辑:啊,刚刚了解了 preg_replace() 的工作原理。显然我误解了它是如何工作的,谢谢你的信息。

4

4 回答 4

1

我完全不明白你为什么需要preg_replace. explode()删除分隔符,因此您所要做的就是分别删除第一个和最后一个字符串上的左括号和右括号。你可以使用substr()它。

获取数组的第一个和最后一个元素:

$first = reset($array);
$last = end($array);

希望有帮助。

于 2012-11-24T10:30:30.933 回答
1

我看到你实际上想提取所有坐标

如果是这样,最好使用 preg_match_all:

$ php -r '
preg_match_all("~\(([\d\.]+), ?([\d\.]+)\)~", "(654,654)(654.321, 654.12)", $matches, PREG_SET_ORDER);
print_r($matches);
'
Array
(
    [0] => Array
        (
            [0] => (654,654)
            [1] => 654
            [2] => 654
        )

    [1] => Array
        (
            [0] => (654.321, 654.12)
            [1] => 654.321
            [2] => 654.12
        )

)
于 2012-11-24T10:27:33.187 回答
0

“这就是 $coords 的价值。”

如果 $coords 是一个字符串,那么你的 foreach 没有意义。如果该字符串是您的输入,则:

$coords= explode (')(', $this->input->post('hide'));

此行从您的字符串中删除了内括号,因此您的 $coords 数组将是:

  • (1.4956873362063747, 103.875732421875
  • 1.4862491569669245, 103.85856628417969
  • 1.4773257504016037, 103.87968063354492)
于 2012-11-24T10:25:14.953 回答
0

pattern参数接受正则表达式。该函数返回一个新字符串,其中与正则表达式匹配的原始字符串的所有部分都被第二个参数替换,即replacement

preg_replace在原始字符串上使用怎么样?

preg_replace('#[()]#',"",$this->input->post('hide'))

要剖析您当前的正则表达式,您正在匹配:

an asterisk character, 
followed by an opening parenthesis,
followed by zero or more instances of 
    any character but a closing parenthesis
followed by a closing parenthesis

当然,这永远不会匹配,因为分解字符串会从块中删除右括号和左括号。

于 2012-11-24T10:25:59.067 回答