PHP Regex用于多个括号

时间:2014-01-22 20:22:59

标签: php regex preg-match-all

我有一个看起来像这样的字符串:

43.3433443 25.3434334), (43.32424432 25.435345345, 43.21313123, 25.32432423423), (43.123123123 25.344234234, 43.1234123123 25.23213123))

我需要使用preg_match_all

提取(和)以及(和)之间的所有内容

我有以下正则表达式,用于提取(和)但不是(和)之间的所有内容。

preg_match_all('/\), \(([A-Za-z0-9., ]+?)\)/', $data[$x], $inner);

我尝试过使用:

preg_match_all('/\), \(([A-Za-z0-9., ]+?)\)|\), \(([A-Za-z0-9., ]+?)\)\)/', $data[$x], $inner);

preg_match_all('/(?=\), \(([A-Za-z0-9., ]+?)\))(?=\), \(([A-Za-z0-9., ]+?)\)\))/', $data[$x], $inner);

但他们都没有奏效。我将如何包括这两种情况?

谢谢。

更新:

我忘了提到,字符串包含我不想要的多个起始和结束括号内的数字,即两个parantheses ---> ((这里的数字)))< --- 3 parantheses

2 个答案:

答案 0 :(得分:3)

使用以下正则表达式:

([^()]+?)\)

<强> Live demo

PHP代码:

preg_match_all('/([^()]+?)\)/', $data[$x], $inner);

上次更新的正则表达式

([^()]+?)\)(?![)]{2,})

Live demo

答案 1 :(得分:1)

我可能在这方面有误,但()中可以找到()),所以为什么不只是寻找()并完成:

<?php
$str = '43.3433443 25.3434334), (43.32424432 25.435345345, 43.21313123, 25.32432423423), (43.123123123 25.344234234, 43.1234123123 25.23213123))';

preg_match_all("/\((.*?)\)/",$str,$matches);

echo '<pre>',print_r($matches),'</pre>';