使用Regex在单词/字符串中爆炸值


Explode values in a word/string with Regex

我有这个示例字符串,我想用regex:

爆炸日,月,小时,分钟,(am/pm)
SunDec 16 00:00am
使用这个:

('w+)'s+('w+)'s+('d+)':('d+)(..)

但是它给了我:

Array
(
    [0] => SunDec 16 00:00am
    [1] => SunDec
    [2] => 16
    [3] => 00
    [4] => 00
    [5] => am
)

我想不出来,我能把SubDec拆成两个吗?

你可以试试:

$str = 'SunDec 16 00:00am';
preg_match('/([A-Z]{1}'w+)([A-Z]{1}'w+)'s+('w+)'s+('d+):('d+)(..)/', $str, $ret);
print_r($ret);

你可以试试这个正则表达式,这可能会帮助你

([A-Z][a-z]+)+'s('d+)?'s?('d+)':('d+)([a-z]+)

如果你的字符串总是遵循这个例子,你可以使用这个:

$string = 'SunDec 16 00:00am';
$pattern = '!([a-zA-Z]{3})([a-zA-Z]{3})'s+('w+)'s+('d+)':('d+)(..)!';
preg_match($pattern, $string, $chunks);
print_r($chunks);
输出:

Array
(
    [0] => SunDec 16 00:00am
    [1] => Sun
    [2] => Dec
    [3] => 16
    [4] => 00
    [5] => 00
    [6] => am
)

你也可以使用这个稍微小一点的模式

'!([a-z]{3})([a-z]{3})'s+('w+)'s+('d+)':('d+)(..)!i'