2014-11-04 37 views
0

我在一个字符串中有超过一千条评论。我被问到是否可以得到每位作者的平均费用。下面是一个字符串的例子。我已经强调了我需要提取到数组中的内容。使用爆炸需要帮助,preg_match

Shepherd的Bush Empire(时报P54 - 4 *大卫·辛克莱)灰熊 - 蛇形会议,海德公园,伦敦(独立Viewspaper P17 - 4 * Elisa的布雷)金发女郎 - 肯伍德别墅(孙P69 - 4 * JJ)杰夫·特威迪 - 联合教堂,伦敦(独立Viewspaper P17 - 4 * Enjoli利斯顿)托尼·本内特 - 阿尔伯特音乐厅,伦敦(时报P68 - 4 *克莱夫·戴维斯,标准P40 - 5 *杰克Massarick

无论如何爆炸字符串*回去一个字符并转发到单词。

我知道会有几率,但可以稍后再删除。有没有使用preg_splitexplode的方法?

+0

我期望http://php.net/manual/en/function.preg-match-all.php将是您的解决方案的基础,但我的正则表达式foo是可悲的缺乏 – Steve 2014-11-04 16:59:04

回答

0

找到一个单一的数字,后跟一个星号,然后用空格

preg_match_all("/\d\* ?\w* ?\w*/", $input_lines, $output_array); 

这里分隔的两个单词是一个例子链接http://www.phpliveregex.com/p/7Ty

你的输出数组看起来像这样

Array 
(
    [0] => Array 
     (
      [0] => 4* David Sinclair 
      [1] => 4* Elisa Bray 
      [2] => 4* JJ 
      [3] => 4* Enjoli Liston 
      [4] => 4* Clive Davis 
      [5] => 5* Jack Massarick 
     ) 

) 

编辑:: 添加一个可选的小数位使用此/\d(\.\d{1,2})?\* ?\w* ?\w*/

+0

辉煌谢谢你,伟大的链接,以及我将保存该工具 – gareth 2014-11-04 17:23:18

+0

只是注意到有一对3.5 *是否有任何方式来包括这些? – gareth 2014-11-04 17:26:03

+0

我更新了我的答案,以显示正则表达式并添加了可选的1位或2位小数位。 @gareth – Zombiesplat 2014-11-04 17:33:34

0

你可以使用正则表达式是这样的:

​​

应该做的伎俩。

这看起来为1个或更大的数字,(保存它们),其次是零个或多个丢弃的空间,文字*,后跟任意数量丢弃空间,随后通过任何数目的任何字符,但字面),保存它们。