使用正则表达式拆分卡片组列表

时间:2019-08-23 16:59:54

标签: php regex

我正在从文件中读取卡片组列表,并希望将其分为3部分。数量,卡名和套装。设置代码在方括号中。这是我拥有的数据的示例:

1 Dead Revels [RNA]
7 Final Payment [RNA]
1 Ob Nixilis's Cruelty [WAR]
1 Aid the Fallen [WAR]
13 Makeshift Battalion [WAR]
1 Sunblade Angel [WAR]
34 Trusted Pegasus [WAR]
1 Orzhov Racketeers [RNA]
1 Wanderer's Strike [WAR]
1 Reya Dawnbringer [UMA]
4 Expansion // Explosion [GRN]

这是到目前为止的代码:

while (($buffer = fgets($file, 4096)) !== false) {
preg_match_all("#[0-9]+\s[a-zA-Z']+(?:[\w -]*[a-zA-Z']+)#", $buffer, $matches);
$count = count($matches[1]);
for($i = 0; $i < $count; $i++) {

...

1 个答案:

答案 0 :(得分:0)

您可以使用

([0-9]+)\s+(.*?)\s*\[([^][]+)]

请参见regex demo

详细信息

  • ([0-9]+)-第1组:1个以上数字
  • \s+-超过1个空格
  • (.*?)-第2组:除换行符以外的任何0+个字符,并且尽可能少
  • \s*-超过0个空格
  • \[-一个[字符
  • ([^][]+)-第3组:除了][以外的1个以上的字符
  • ]-一个]字符。

请参见PHP demo

if (preg_match('~([0-9]+)\s+(.*?)\s*\[([^][]+)]~', $buffer, $matches)) {
    print_r(array_slice($matches, 1)); 
}