2012-03-18 19 views
0

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

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

期望的结果:

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

基本上去除 “” 和任何在括号。

回答

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); 
+0

我写了同样的正则表达式,但你1分钟快。 +1为解释和其他字符类别的建议 – CodeZombie 2012-03-18 02:32:07

+0

这似乎只适用于“某事”是一个字。你会怎么做,如果它是例如:some1 here(30),something2(10)我应该注意,括号中应该只包含最多100的数字。 – Malcr001 2012-03-18 03:27:58

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 
) 
+0

我理解这一点,因为表达式仍然让我感到困惑但是这只有在某个词是某个词时才有效。我如何得到下面的工作: 东西在这里(10),东西(20),在这里再次(30) – Malcr001 2012-03-18 02:55:42

+0

我编辑了我的原始示例,因为我在使用多个单词后跟括号内的数字例如:图书标签(30),图书标签2(100) – Malcr001 2012-03-18 03:14:33

+0

我已更新我的代码以符合您的新要求。 – kba 2012-03-18 03:32:09

相关问题