我正在尝试为内部标记语言开发代码验证系统,但由于我对正则表达式没有经验,我遇到了一些麻烦。语言中的标签遵循以下格式:
{ 标签:数字:短语 1 | 短语 2 ... | 短语 n}
其中 number 是 (3.0, 3.5, 4.0 ... 8.5) 范围内的数字,并且其中一个短语的末尾必须有一个星号,并且必须至少有两个短语。请注意,标签不区分大小写,空格无关紧要。
我正在使用的正则表达式是:
\{ ?(mw) ?: ?[3-8]{1}(.0|.5)? ?((((\| ?(\w ?)+[\p{P}]? ?)*)+((\| ?(\w\ ?)+[\p{P}]?)* ?\* ?)+((\| ?(\w ?)+[\p{P}]? ?)*)?)|(((\| ?(\w ?)+[\p{P}]? ?)*)?((\| ?(\w ?)+[\p{P}]?)* ?\* ?)+((\| ?(\w ?)+[\p{P}]? ?)*)+))( ?\})
这确实符合以下正确情况:
{ mw : 3.5 | phrase 1 | phrase 2* | phrase 3}
还有以下不正确的情况:
{ mw : 3.5 | phrase 1* | phrase 2* | phrase 3} [Two asterisks]
和
{ mw : 3.5* | phrase 1 | phrase 2* | phrase 3} [An asterisk with the number value]
谢谢你的帮助。
如果有人想提供有关数据验证系统通常如何工作的任何见解,我将不胜感激。