$line = "Type:Bid, End Time: 12/20/2018 08:10 AM (PST), Price: $8,000,Bids: 14, Age: 0, Description: , Views: 120270, Valuation: $10,75, IsTrue: false";
我需要获取此数组:
Array ( [0] => Bid [1] => 12/20/2018 08:10 AM (PST) [2] => $8,000 [3] => 14 [4] => 0 [5] => [6] => 120270 [7] => $10,75 [8] => false )
答案 0 :(得分:2)
我同意安德烈亚斯(Andreas)关于使用preg_match_all()
的观点,但不同意他的模式。
出于稳定性考虑,我建议从一开始就使用整个字符串。
[^:]+:
\s*
\K
.*?
,[^,:]+:
或结尾$
的字符串。代码:(Demo)
$line = "Type:Bid, End Time: 12/20/2018 08:10 AM (PST), Price: $8,000,Bids: 14, Age: 0, Description: , Views: 120270, Valuation: $10,75, IsTrue: false";
var_export(
preg_match_all(
'/[^:]+:\s*\K.*?(?=\s*(?:$|,[^,:]+:))/',
$line,
$out
)
? $out[0] // isolate fullstring matches
: [] // no matches
);
输出:
array (
0 => 'Bid',
1 => '12/20/2018 08:10 AM (PST)',
2 => '$8,000',
3 => '14',
4 => '0',
5 => '',
6 => '120270',
7 => '$10,75',
8 => 'false',
)
答案 1 :(得分:0)
很多更好的主意:
$parts=explode(',',$line,4); //explode has a limit you can use in this case 4
相同的结果,更少的代码。
我会保持简单并做到这一点
$line = "TRUE,59,m,10,500";
$parts = preg_split("/,/", $line);
//print_r ($parts);
$parts[3]=$parts[3].','.$parts[4]; //create a new part 3 from 3 and 4
//$parts[3].=','.$parts[4]; //alternative syntax to the above
unset($parts[4]);//remove old part 4
print_r ($parts);
我也只使用explode()
而不是正则表达式。
答案 2 :(得分:0)
我会改用preg_match。
在此模式中,查找的数字是逗号逗号,或者仅是数字或单词和逗号。
我在字符串后附加一个逗号以使正则表达式更简单。
$line = "TRUE,59,m,10,500";
preg_match_all("/(\d+,\d+|\d+|\w+),/", $line . ",", $match);
var_dump($match);
即使项目的顺序不同,此代码仍将产生正确的输出:https://3v4l.org/SRJOf
答案 3 :(得分:0)
如果不应该将数字后跟逗号和数字分开,则可以匹配1个以上的数字,重复匹配一个逗号后跟1个以上的数字的分组结构,然后使用SKIP FAIL跳过该匹配。然后使用交替方式仅匹配逗号:
\d+(?:,\d+)+(*SKIP)(*F)|,
请参见regex demo | Php demo
例如:
$line = "TRUE,59,m,10,500";
$parts = preg_split("/\d+(?:,\d+)+(*SKIP)(*F)|,/", $line);
echo '<table>';
foreach($parts as $parts){
echo '<th>';
echo ($parts);
echo '</th>';
}
echo '<table>';
结果
<table><th>TRUE</th><th>59</th><th>m</th><th>10,500</th><table>
答案 4 :(得分:0)
根据新要求的新答案:
我使用他相同的正则表达式来分割字符串,并在冒号之前替换了它:
$line = "Type:Bid, End Time: 12/20/2018 08:10 AM (PST), Price: $8,000,Bids: 14, Age: 0, Description: , Views: 120270, Valuation: $10,75, IsTrue: false";
$parts = preg_split("/(?<!\d),|,(?!\d)/", $line);
$result = array();
foreach($parts as $elem) {
$result[] = preg_replace('/^[^:]+:\h*/', '', $elem);
}
print_r ($result);
输出:
Array
(
[0] => Bid
[1] => 12/20/2018 08:10 AM (PST)
[2] => $8,000
[3] => 14
[4] => 0
[5] =>
[6] => 120270
[7] => $10,75
[8] => false
)