我遇到涉及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);
问题在于可选部分(例如最新文件 - &#34; 45D&#34;)
我需要这个结果:
D.SAE.IND.001.TME.BR.SER.20120729
$ result [&#39; fonte&#39;] =&#39; SAE&#39;
$ result [&#39; tipo&#39;] =&#39; IND&#39;
$ result [&#39; numberLevel&#39;] =&#39; 001&#39;
$ result [&#39;指标&#39;] =&#39; TME&#39;
$ result [&#39; nameLevel&#39;] =&#39; BR&#39;
$ result [&#39; group&#39;] =&#39; SER&#39;
$ result [&#39; op&#39;] =&#39;&#39;
$ result [&#39; id&#39;] =&#39; 20120729&#39;
D.SAE.LIS.008.AGE.APS.SER.45D.20120713
$ result [&#39; fonte&#39;] =&#39; SAE&#39;
$ result [&#39; tipo&#39;] =&#39; LIS&#39;
$ result [&#39; numberLevel&#39;] =&#39; 008&#39;
$ result [&#39;指标&#39;] =&#39;年龄&#39;
$ result [&#39; nameLevel&#39;] =&#39; APS&#39;
$ result [&#39; group&#39;] =&#39; SER&#39;
$ result [&#39; op&#39;] =&#39; 45D&#39;
$ result [&#39; id&#39;] =&#39; 20120713&#39;
提前感谢您的帮助。
答案 0 :(得分:8)
为什么不使用explode('.', $string)
?
您可以对数组进行计数以查看条目数。如果是7,则表示您缺少可选字符串。
答案 1 :(得分:4)
这对我有用:
/D\.(?P<font>[\w]*)\.(?P<tipo>[\w]*)\.(?P<numberLevel>[\d]*)\.(?P<indicator>[\w]*)\.(?P<nameLevel>[\w]*)\.(?P<group>[\w]*)\.(?:(?P<op>.*)\.)?(?P<id>[\d]*)/i
关键是添加:
(?:(?P<op>.*)\.)?
id
组之前。
修改:添加?:
以使分组无法捕获。