我想从一组循环中运行的字符串中删除所有括号。我看到这样做的最好方法是使用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];
}
这就是'hide'的价值。
(1.4956873362063747, 103.875732421875)(1.4862491569669245, 103.85856628417969)(1.4773257504016037, 103.87968063354492)
据我所知,这种模式是错误的。我从另一个线程得到它,我试图阅读有关模式,但无法得到它。我的时间比较短,所以我在这里发布了这个,同时也在网络的其他部分寻找其他方法。有人可以为我提供正确的模式吗?或者有更简单的方法吗?
编辑:啊,刚刚得到了preg_replace()的工作原理。显然我误解了它是如何工作的,谢谢你的信息。答案 0 :(得分: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
)
)
答案 1 :(得分:1)
我完全不明白为什么你需要preg_replace
。 explode()
删除分隔符,因此您所要做的就是分别删除第一个和最后一个字符串上的开始和结束parantheses。您可以使用substr()
。
获取数组的第一个和最后一个元素:
$first = reset($array);
$last = end($array);
希望有所帮助。
答案 2 :(得分:0)
“这就是$ coords的价值。”
如果$ coords是一个字符串,那么你的foreach毫无意义。如果该字符串是您的输入,那么:
$coords= explode (')(', $this->input->post('hide'));
此行从字符串中删除内部括号,因此$ coords数组将为:
答案 3 :(得分: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
当然,这永远不会匹配,因为爆炸字符串会从块中删除结束和打开括号。