如何在 preg_match 中添加可选的验证模式?

How can I add optional validation patten in preg_match?

我正在尝试使用 preg_match 来解析该行。但是,无法正确得到结果。

我想用可选的 // 字符解析那些行。

基本思路是有些行可能包含 //0016OIXXXXXXX(//4 位数字和 9 str),有些行可能不包含(//4 位数字和 9 str)。

下一行 \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 只能与 // 一起使用。如果没有 //,则 patten 被破坏并且无法解析该行。

我不知道如何添加 (\/\/)([0-9A-Z]{1,16}) 作为可选模式。

提前致谢 :)

如果我理解正确你的问题。

请尝试在组之间使用 or 表达式并验证您的任何情况。 例如

`(pattern1) | (pattern-2) | ( (pattern3) | (pattern 4)  )`

请尝试考虑使用 | 表达式。

把optional部分做好就好了...optional:

\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})

DEMO