我是PHP中的正则表达式的新手,所以我想知道如何拆分下面的所有“somethings”存储在数组中?
$string = "something here (9), something here2 (20), something3 (30)";
期望的结果:
$something_array = array(
[0] => something
[1] => something2
[2] => something3 )
基本上删除“,”以及括号中的任何内容。
答案 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
)