我需要在 PHP 中针对给定字符串中的许多文章引用进行模式匹配,然后我想提取它们。引用最多可以有 16 位数字,每个数字都可以有不同的值。要知道的一件事:从(包括)数字 11 开始,传入数据中的所有内容都可以是可选的(但如果在可选数字之后有有效的东西,那么这个数字必然是“-”)。另外,如果你有“-”直到最后,引用可以被截断。例如 :
A2--L3500XM-----可以是A2--L3500XM
D4--L4652Z-4----可以是D4--L4652Z-4
A3--L5020MW4---A留A3--L5020MW4---A
这些都是有效的参考。这是我迄今为止一直在做的事情:
[DA][1-5][V\-][AN\-][LMFGHN][\d]{4}[H-RT-ZBD]([H-RT-ZBD\-]?)(?(-1)[1-4\-]?)
我到了第 11 位,但这就是它变得棘手的地方。这是我的示例参考:
D1--L6000T-4 VALID D1--L6000T VALID D1--L6000T4----- INVALID D1--L6000T----- VALID
我已经用 VALID 注释了应该匹配的那些。我的问题是我的正则表达式全部采用(按预期截断“-”),但第三个不应该匹配,因为 4 对第 11 位无效。我认为它采用 4 的原因是因为第 10 位是可选的,这意味着如果它不存在,我猜 -1 可能是指[H-RT-ZBD],其中包含几乎相同的字符?所以我在这里有点迷茫,我的问题是:我怎样才能做到这一点?有没有更简单的方法 ?甚至可以做到吗?
模式规则:
digit number : pattern
1 : [DA]
2 : [1-5]
3 : [V-]
4 : [AN-]
5 : [LMFGHN]
6-9 : \d{4}
10 : [H-RT-ZBD]
11 : [H-RT-ZBD-]?
12 : [1-4-]?
13 : [KRX-]?
14 : [CPW-]?
15 : [MT-]?
16 : [A-C-]?
通常,要匹配的输入字符串是一个包含大量空格和可能任何字符的普通表。