我正在尝试创建一个表达式来验证提供的字符串是否是有效的格式,但似乎如果我在几个月内不使用正则表达式,我会忘记我学到的所有内容并且必须重新学习它。< / p>
我的表达式应符合以下格式:010L0404FFCCAANFFCC00M000000XXXXXX 四个分隔符是(L,N,K,M),它们不在0-9A-F十六进制范围内以表示唯一性必须按顺序或不在列表中。每个分隔符只能存在一次!
它分解为:
最难的部分我无法弄清楚它是否需要它按顺序排列,并且在倍数中,如L分隔符必须在之前,而K总是如果它在那里(原因所以我不会得到相同字符串的变体与交换分隔符相同的意思)。我已经可以解析它了,我只是想验证字符串格式是否正确。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:1)
^([0-9]{3})(L[0-9]{4}[0-9A-F]{6})?(N[0-9A-F]{6})?(K[0-9]+)?(M([0-9A-F]{6})+|MX{6})$
答案 1 :(得分:1)
要求订单并不算太糟糕。只需使每组都可选。正则表达式仍将按顺序匹配,因此如果L部分不存在且下一个字符为N,则不会让L出现,因为它不会与正则表达式的任何其余部分匹配。
我相信您的要求的直接翻译将是:
^([0-9]{3})(L[0-9]{4}[0-9A-F]{6})?(N[0-9A-F]{6})?(K[0-9]+)?(M([0-9A-F]{6}|X{6})+)?$
没有真正的技巧,只是让每个组都可选,除了前三个数字,并为M块中的两个六位数字模式添加内部替代。