我尝试使用preg_match
来解析行。但是,无法正确获得结果。
我想用可选的//
字符来解析这些行。
基本思路是,某些行可能包含// 0016OIXXXXXXX(// 4位数字和9个字符),而某些行可能不包含(// 4位数字和9个字符)。
下一行\n
是必填项。
这里有一些示例行;
第1行
1812121212DD2220,31NTRFNONREF
502?102330
第2行
1811091109CD20693,12NTRFRMSOIC110871941//0016RFXXXXXXX
206?000801
这是我的帕滕;
/(\d{6})((\d{2})(\d{2}))?(C|D)([A-Z]?)([0-9,]{1,15})([A-Z]{1,4})([A-Z a-z 0-9]{1,16})(\/\/)([0-9A-Z]{1,16})(\s*\n)([0-9]{1,3})(\?)([0-9]{0,6})/
当前的专利只能与//
一起使用。如果没有//
,则patten损坏并且无法解析该行。
我不知道应该如何添加(\/\/)([0-9A-Z]{1,16})
作为可选的模板。
预先感谢 :)
答案 0 :(得分:1)
如果我理解正确,那么您的问题是否正确。
请尝试在组之间使用or
表达式并验证您的大小写。
例如
`(pattern1) | (pattern-2) | ( (pattern3) | (pattern 4) )`
请尝试考虑使用|
表达式。
答案 1 :(得分:1)
只需将可选部分做好...可选:
\d{6}(?:\d{4})?[CD][A-Z]?[0-9,]{1,15}[A-Z]{1,4}[A-Za-z0-9 ]{1,16}(?:\/\/[0-9A-Z]{1,16})?\s*\n[0-9]{1,3}\?[0-9]{0,6}
// ^^^^^^^^^^^^^^^^^^^^^^^
如果您确实想保留捕获组,出于方便起见,我将其删除:
(\d{6})((\d{2})(\d{2}))?(C|D)([A-Z]?)([0-9,]{1,15})([A-Z]{1,4})([A-Za-z0-9 ]{1,16})(?:(\/\/)([0-9A-Z]{1,16}))?(\s*\n)([0-9]{1,3})(\?)([0-9]{0,6})