我正在从文件中读取卡片组列表,并希望将其分为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++) {
...
答案 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));
}