我有以下字符串,格式为 country:
Cum name
, Extra info
.
Asia: Asian Cup - Play Offs
Asia: Asian Cup
Asia: World Cup - Qualification - First Stage
Australia: A-League
Belgium: Jupiler League - Championship Group
Brazil: Série A
我遇到的问题是如何使用正则表达式分隔每行的信息。
更具体地说,我喜欢从第一行导出以下信息:
[ Asia, Asian Cup, Play Offs ]
从第二秒开始的信息
[ Asia, Asian Cup ]
等等。
目前,我尝试了以下陈述:
^([w]+:s+)[^-]+(?!-s)+
它还没有完成,我不知道如何继续。我的主要问题是我不知道如何否定声明的一部分。
那么,解决这个问题的方法是什么?
explode
:
$lines = ['Asia: Asian Cup - Play Offs',
'Asia: Asian Cup',
'Asia: World Cup - Qualification - First Stage',
'Australia: A-League',
'Belgium: Jupiler League - Championship Group',
'Brazil: Série A'];
$results = array_map(function ($i) {
$ret = [];
list($ret[0], $tmp) = explode(': ',$i, 2);
return array_merge($ret, explode(' - ', $tmp, 2));
}, $lines);
print_r($results);
你可以在PHP中尝试这个正则表达式:
/^(p{Lu}p{L}*):h*(.+?)(?:h-h(.+))?$/mu
正则表达式演示
首先,在 n
上扩展字符串,然后您可以使用以下正则表达式:
([ws]+): ([w ]+)(?:- ?([w -]+))?
这里解释 https://regex101.com/r/lV7lT0/1
这对我来说看起来并不复杂。 您希望拆分冒号后跟空格或空格连字符空格。 preg_split()
很乐意答应。
代码:(演示)
$lines = [
'Asia: Asian Cup - Play Offs',
'Asia: Asian Cup',
'Asia: World Cup - Qualification - First Stage',
'Australia: A-League',
'Belgium: Jupiler League - Championship Group',
'Brazil: Série A'
];
var_export(
array_map(
fn($v) => preg_split('/: | - /', $v),
$lines
)
);
输出:
array (
0 =>
array (
0 => 'Asia',
1 => 'Asian Cup',
2 => 'Play Offs',
),
1 =>
array (
0 => 'Asia',
1 => 'Asian Cup',
),
2 =>
array (
0 => 'Asia',
1 => 'World Cup',
2 => 'Qualification',
3 => 'First Stage',
),
3 =>
array (
0 => 'Australia',
1 => 'A-League',
),
4 =>
array (
0 => 'Belgium',
1 => 'Jupiler League',
2 => 'Championship Group',
),
5 =>
array (
0 => 'Brazil',
1 => 'Série A',
),
)
<小时 />如果您的输入数据实际上是文本块,则只需使用 R
将其拆分为换行符即可。(演示)
preg_split('/R/', $text)