我想匹配包含至少大寫和至少一個小寫字母的4到8個混合大小寫字母的字符串。我嘗試過[a-zA-z] {4,8},但它匹配了只包含小寫或大寫字母的字符串,如abba和CREEEDD。這是可以在Lex中完成的事情,還是我需要以不同的方式做到這一點?在Lex中匹配包含至少一個大寫和小寫字母的字符串,
回答
你需要零個或多個混合大小寫字母的字符串,然後是uppper小寫字母,零個或多個混合大小寫字母,小寫字母,以及零個或多個混合大小寫字母,或用更低的類似的模式大寫之前的情況。
但是,這很混亂。所以,我們可以嘗試簡化。第一個字符可能是大寫字母,所以我們需要它,接着是零個或多個混合大小寫字母,小寫字母以及零個或多個混合大小寫字母。或者第一個字符可能是小寫字母,所以我們需要它,接着是零個或多個混合大小寫字母,大寫字母以及零個或多個混合大小寫字母。
[a-z][a-zA-Z]*[A-Z][a-zA-Z]*|[A-Z][a-zA-Z]*[a-z][a-zA-Z]*
殘留問題是限制總長度的範圍4-8字符(注意,僅有8字母字符是可悲密碼這些天;允許標點符號和數字和超過8個字符)。我會在模式識別後的動作中實現長度驗證。
或者,也可能更簡單,使用現有的規則:
[a-zA-Z]{4,8}
,並在行動應用大小寫混合驗證:
if (islower(yytext[0]) && strpbrk(yytext, "ABCDEFGHIJKLMNOPQRSTUVWXYZ") == 0)
...reject...
else if (isupper(yytext[0]) && strpbrk(yytext, "abcdefghijklmnopqrstuvwxyz") == 0)
...reject...
這迫切需要在正則表達式的&
(和)操作,那麼下面會做的工作:
((([a-zA-Z]*([a-z][a-zA-Z]*[A-Z])|([A-Z][a-zA-Z]*[a-z]))[a-zA-Z]*)&([a-zA-Z]{4,8})
,但該操作不存在。當然,您可以列舉混合案例中小寫字母或大寫字母位置的所有可能性,但這將構成一個巨大的表達。
是不是經過4到8個字符的所有字符串進行過濾,以檢查不同的較低和大寫字母都存在可行嗎?也許你可以將第二個正則表達式應用於前者的結果。
附註:對於&
操作沒有理論上的反對意見,因爲確定性有限自動機在交叉點下是封閉的,雖然狀態的數量可能會爆炸。這可能需要對非確定性有限自動機的通常解釋器進行重大修改。
哦,如果有人覺得挑戰是要有所作爲,那麼不要忘了補任。
是否有可能創建一個匹配[a-zA-Z] {4,8}的規則,並將匹配的字符串發送到一個函數,以確定它是否具有其中的一個?我剛剛開始學習Lex,所以我不知道。 –
如果你在'lex'中工作,那麼我肯定會檢查規則動作中是否出現大寫和小寫,如果沒有,那麼使用'REJECT'去下一個最佳模式。鏈接規則在'lex'(不幸)是不可能的。 –
- 1. 匹配至少一個小寫字母和至少一個大寫字母
- 2. 測試至少一個小寫字母和大寫字符
- 3. 匹配小寫字母正好包含三個大寫字母
- 4. 想匹配大寫和小寫字母
- 5. 將包含大寫字母的字符串轉換爲小寫字母
- 6. 帶大寫字母和小寫字母的字符串轉換
- 7. 匹配以小寫字母和大寫字母(或小寫字母和大寫字母組合)形式出現的字符串
- 8. 帶有至少一個大寫字母,一個小寫字母,一個特殊字符,一個數字和一個空格的字符串
- 9. 匹配至少包含一個單詞的字符串
- 10. 正則表達式確保字符串至少包含一個小寫字母,大寫字母,數字和符號
- 11. 在jQuery中匹配一個字符串,不管大小寫
- 12. 字符串包含 - 忽略大小寫
- 13. 正則表達式匹配大寫字母,數字或大寫字母,小寫字母和數字
- 14. 在C中使用大寫字母和小寫字母對字符串排序
- 15. 大寫字母和小寫字母
- 16. 如何檢查字符串是否至少有6個字符,一個大寫字母和一個數字? - Javascript
- 17. 需要RegExpr匹配組8,包含2+,大寫字母2+,小寫字母和1+數字
- 18. 如何匹配的第一個字母是大寫/大寫字母在PHP?
- 19. 檢查字符串中的小寫字母和大寫字母相鄰嗎?
- 20. Python:替換字符串中的大寫字母和小寫字母
- 21. 正則表達式查找在perl中包含至少兩個大寫字母的字符串
- 22. 密碼的正則表達式至少包含8個字符,1個數字以及大寫和小寫字母和特殊字符
- 23. 匹配大寫字母和小寫字母的正則表達式
- 24. 計算大寫字母,小寫字母和其他字符
- 25. 如何檢查至少包含一個字母和一個數字的字符串字符串
- 26. 檢查字符串中是否包含大寫字母「inside」
- 27. 匹配模式和$ BASH_REMATCH字符串中的多個大寫字母
- 28. 密碼驗證 - 至少一個大寫,一個小寫字母和一個數字
- 29. 只識別帶有大寫字母和小寫字母的字符串
- 30. 將字符串中的第一個字符大寫首字母大寫
4至8 **小寫的_a串* * letters_你的意思是一串由4到8個混合的下部和上部字母組成的字符串? – Shahbaz
謝謝。我修好了它。 –