我需要帮助在PHP中拆分字符串。我正在从另一个网站抓取数据,我试图拆分在各个不同点返回的字符串并将其保存在一个数组中。
以下是我想要拆分的方法。所以我想在日期之后,在每个"("和"之后)"之前分开它。字符。然后将其存储在一个数组中。
字符串示例:
01/11/2016聚合微电力控股有限公司(AMPH)摩根大通全球增长与发展收入公司(JPGI)Murray Income Trust plc(MUT)
最终结果示例
"date" => "01/11/2016",
"company" => "Aggregated Micro Power Holdings plc",
"epic" => "(AMPH)",
"company" => "JPMorgan Global Growth & Income plc",
"epic" => "(JPGI)",
"company" => "Murray Income Trust plc",
"epic" => "(MUT)",
到目前为止,我已经尝试使用explode来尝试在")"之后分割字符串。字符。
$string = "01/11/2016 Aggregated Micro Power Holdings plc (AMPH) JPMorgan Global Growth & Income plc (JPGI) Murray Income Trust plc (MUT)";
$array = explode(") ", $string);
echo '<pre>' . var_dump($array) . '</pre>';
如果我转储数组,我会得到以下内容:
array(1){[0] =&gt;字符串(129)&#34; 01/11/2016聚合微电力控股有限公司(AMPH)摩根大通全球增长与发展收入公司(JPGI)Murray Income Trust plc(MUT)&#34; }
更新*
好的,所以我尝试使用以下内容来分隔已经奏效的日期。
$spilt = preg_split('/(\d{2}\/\d{2}\/\d{4})/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
我现在得到以下内容,但为什么值0显示为空?
array(3){[0] =&gt; string(0)&#34;&#34; [1] =&GT; string(10)&#34; 01/11/2016&#34; [2] =&GT;字符串(116)&#34;聚合微电力控股有限公司(AMPH)摩根大通全球增长&amp; amp;收入公司(JPGI)Murray Income Trust plc(MUT)&#34; }
答案 0 :(得分:1)
我不了解Preg_match解决方案,但我花了2天的时间,然后通过在不同的地方拆分这个字符串并输出结果来走另一条路线。我的解决方案是: -
$string = '22/11/2016 Iofina (IOF) Gamma Comminucations (GAMA) Ibstock (IBO) Hurricane (HUR) Apple (APPL) Melrose (MRO)';
// Splits the string and returns the date
$date = preg_split('(\s.*)', $string , null, PREG_SPLIT_DELIM_CAPTURE);
$date = implode('', $date);
这让我: // string(10)“22/11/2016”
// Removes the date and splits the string after every ) bracket
$companies = preg_split('([\)])', str_replace(range(0, 9), '', str_replace('/', '', $string)) , null, PREG_SPLIT_DELIM_CAPTURE);
这让我:
// array(6){[0] =&gt; string(12)“Iofina(IOF”[1] =&gt; string(27)“Gamma Comminucations(GAMA”[2] =&gt; string(13)“Ibstock(IBO”[3] =&gt; string(15) “Hurricane(HUR”[4] =&gt; string(12)“Apple(APPL”[5] =&gt; string(13)“Melrose(MRO”}
<h3><?php echo $date; ?></h3>
<?php foreach (array_filter($companies) as $key => $value) { ?>
<?php echo '<p>' . $value . ')' . '</p>'; ?>
<?php } ?>
以上显示以下内容
22/11/2016
Iofina(IOF)
Gamma Comminucations(GAMA)
Ibstock(IBO)
飓风(HUR)
Apple(APPL)
Melrose(MRO)
答案 1 :(得分:0)
您可以使用正则表达式实现此目的:
请参阅this:
$string = "01/11/2016 Aggregated Micro Power Holdings plc (AMPH) JPMorgan Global Growth & Income plc (JPGI) Murray Income Trust plc (MUT)";
preg_match_all('/(?P<date>\d+\/\d+\/\d+)\s|\G\s*(?P<company>.*?)\s*\((?P<epic>.*?)\)/', $string, $matches, PREG_SET_ORDER);
var_dump($matches);