如何使用正则表达式分隔字符串的各个部分

时间:2016-02-04 18:16:28

标签: php regex

我有以下字符串,其格式为country: Cum nameExtra 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)+

没有完成,我不知道如何继续这个。我的主要问题是我不知道如何否定声明的一部分。

那么,解决这个问题的方法是什么?

我在这里有一个实时编辑示例:http://refiddle.com/refiddles/56b3960775622d40bb050000

3 个答案:

答案 0 :(得分:3)

您可以使用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);

答案 1 :(得分:2)

你可以在PHP中尝试这个正则表达式:

/^(\p{Lu}\p{L}*):\h*(.+?)(?:\h-\h(.+))?$/mu

RegEx Demo

答案 2 :(得分:1)

首先,在\n上展示您的字符串,然后您可以使用以下正则表达式:

([\w\s]+): ([\w ]+)(?:- ?([\w -]+))?
  

在此解释https://regex101.com/r/lV7lT0/1