我写正则表达式的能力很差。
我试图在括号和#34;()"之间获得价值。像下面的东西......
$a = "POLYGON((1 1,2 2,3 3,1 1))";
preg_match_all("/\((.*)\)/U", $a, $pat_array);
print_r($pat_array);
但这会给我一些像......
的元素Array
(
[0] => Array
(
[0] => ((1 1,2 2,3 3,1 1)
)
[1] => Array
(
[0] => (1 1,2 2,3 3,1 1
)
)
但我想要获取" 1 1,2 2,3 3,1 1"作为输出。
我知道我们可以在获得此输出后修剪括号。但如果使用正则表达式完成,这将是很好的。
提前致谢。
<小时/> 解决方案:根据 @anubhava 回答:
使用 @anubhava 的正则表达式。
示例:
$a = "POLYGON((1 1,2 2,3 3,1 1),(1 1,2 2,3 3,1 1),(1 1,2 2,3 3,1 1))";
如果这个正则表达式的打印结果你会得到这样......
Array
(
[0] => Array
(
[0] => ((1 1,2 2,3 3,1 1)
[1] => (1 1,2 2,3 3,1 1)
[2] => (1 1,2 2,3 3,1 1))
)
[1] => Array
(
[0] => 1 1,2 2,3 3,1 1
[1] => 1 1,2 2,3 3,1 1
[2] => 1 1,2 2,3 3,1 1
)
)
看看第二个数组元素,它就像我们想要的那样。
仅供参考:我用它从MySQL数据库中获取POLYGON的GEOMETRY数据,然后用数组处理它以获得所有多边形节点的所有纬度和经度。
答案 0 :(得分:3)
使用基于否定的正则表达式模式并从捕获的组#1中获取结果:
preg_match_all('/\(+([^()]*)\)+/', $a, $pat_array);
print_r($pat_array[1]);
[^()]*
将匹配任何非(
或)
的字符。
<强>输出:强>
Array
(
[0] => 1 1,2 2,3 3,1 1
)
答案 1 :(得分:1)
使用lookarounds
preg_match_all("/(?<=\()[^()]*(?=\))/U", $a, $pat_array);
参见演示。