PHP和Regex - 可选部分

Nak*_*aBr 2 php regex

我有一个涉及PHP和正则表达式的问题.

我有一些文件,需要捕获一些名称.但有一部分并非全部.

示例文件:
D.SAE.IND.001.TME.BR.SER.20120729
D.SUI.IND.003.TMC.GER.TOT.201206
D.SAE.LIS.008.AGE.APS.SER.45D.20120713

请注意,最后一个文件的部分("45D")是可选的.
我需要得到每一个团体.我使用以下正则表达式:

preg_match('/D\.(?P<font>[\w]*)\.(?P<tipo>[\w]*)\.(?P<numberLevel>[\d]*)\.(?P<indicator>[\w]*)\.(?P<nameLevel>[\w]*)\.(?P<group>[\w]*)\.(?P<id>[\d]*)/i', $arrInput , $result);

问题是可选部分(例如最新文件 - "45D").
我需要这个结果:

D.SAE.IND.001.TME.BR.SER.20120729
$ result ['fonte'] ='SAE'
$ result ['tipo'] ='IND'
$ result ['numberLevel'] = '001'
$ result ['indicator'] ='TME'
$ result ['nameLevel'] ='BR'
$ result ['group'] ='SER'
$ result ['op'] =''
$ result [' id'] ='20120729'

D.SAE.LIS.008.AGE.APS.SER.45D.20120713
$ result ['fonte'] ='SAE'
$ result ['tipo'] ='LIS'
$ result ['numberLevel'] ='008'
$ result ['indicator'] ='AGE'
$ result ['nameLevel'] ='APS'
$ result ['group'] ='SER'
$ result ['op'] ='45D'
$ result ['id' ] ='20120713'

提前感谢您的帮助.

Exp*_*lls 8

你为什么不用explode('.', $string)

您可以对数组进行计数以查看条目数.如果是7,则表示您缺少可选字符串.