我正在嘗試開發內部標記語言的代碼驗證系統,但我遇到了一些麻煩我對正則表達式的經驗不足。該語言中的標籤遵循以下格式:我遇到了與我不想要的正則表達式匹配案例的問題(數據驗證)
{tag:number:phrase 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]
感謝您的幫助。
如果有人想提供有關數據驗證系統通常工作方式的任何見解,我將不勝感激。
它變得更容易處理,如果你considere三個獨立(例如@ archeong87的答案):1)短語,後面跟着帶星號的短語,2)帶星號的短語,後面跟着沒有的短語,以及3)帶星號的短語,由沒有的短語包圍。 – fork0 2012-07-09 14:50:21
@ fork0 - 也可以,但實際上我所做的是:0個或更多沒有星號的短語,1個帶星號的短語和0個或更多沒有星號的短語。實際上相同,但你的措辭表明更多地使用替換,''|''。 – 2012-07-09 15:00:20
這是一個要求,害怕... – fork0 2012-07-09 15:03:47