字符串到数组的正则表达式

时间:2012-03-18 02:16:48

标签: php regex

我是PHP中的正则表达式的新手,所以我想知道如何拆分下面的所有“somethings”存储在数组中?

$string = "something here (9), something here2 (20), something3 (30)";

期望的结果:

$something_array = array(
[0] => something 
[1] => something2
[2] => something3 ) 

基本上删除“,”以及括号中的任何内容。

2 个答案:

答案 0 :(得分:3)

正则表达式如下:(.*?) \([^)]*\),? 它用 。 (任何事情),因为你提出要求,但是如果它是一个词,你应该使用\ w,或者除了空格之外的任何东西\ S所以它会是这样的:(\S*) \([^)]*\),?

解释表达式:

  • (.*?) - 匹配任何内容,但是在懒惰模式下,或者尽可能少地匹配' 模式
  • [^)]* - 尽可能多地匹配任何内容
  • \([^)]*\) - 匹配一对括号及其内容
  • ,? - 匹配逗号(如果有) 有

您可以测试所有这些HERE

最后,使用preg_match_all PHP函数,看起来像这样:

$str = 'something (this1), something2 (this2), something3 (this3)';
preg_match_all('/(\S*) \([^)]*\),?/', $str, $matches);
print_r($matches);

答案 1 :(得分:1)

我不会像这样使用正则表达式,而只使用PHP的explode()函数。

$parts = explode(', ', $string);
$result = array_map(function($element) {
    return substr($element, 0, strrpos($element, ' '));
}, $parts);
print_r($result);

上面会输出

Array
(
    [0] => something here
    [1] => something here2
    [2] => something3
)