請幫我撰寫一個有效的正則運算式。狀況:
- 最多可以有
9字符(從 1 到 9)。 - 的前八個字符只能是大寫字母。
- 在最后一個字符只能是數字。
例子:
不匹配:
S3FT5FGTU7ERTYUOP9ERTGHYUKM
相當于:
EERTRTYUKLVBNDEFRW3
我嘗試使用以下方法:
^[A-Z]{1,8}\d{0,1}$
但在這種情況下,FT5 示例匹配,盡管它不應該。
uj5u.com熱心網友回復:
您可以使用基于交替的正則運算式:
^(?:[A-Z]{1,8}|[A-Z]{8}\d)$
正則運算式演示
正則運算式詳情:
^: 開始(?:: 啟動非捕獲組[A-Z]{1,8}: 匹配 1 到 8 個大寫字母|: 或者[A-Z]{8}\d: 匹配 8 個大寫字母后跟一個數字
): 結束非捕獲組$: 結尾
uj5u.com熱心網友回復:
您還可以使用否定查找頭排除前 7 個大寫字符后跟一個數字:
^(?![A-Z]{1,7}\d)[A-Z]{1,8}\d?$
^字串的開始(?![A-Z]{1,7}\d)否定前瞻斷言不是 1-7 個大寫字符和一個數字[A-Z]{1,8}匹配 1-8 次大寫字符\d?匹配一個可選數字$字串結束
正則運算式演示
uj5u.com熱心網友回復:
使用支持所有格量??詞的正則運算式引擎,您可以撰寫:
^[A-Z]{1,7} (?:[A-Z]\d?)?$
演示
可選組中的字母只有在量詞 in[A-Z]{1,7} 達到最大值并且還有一個字母時才能成功。組中的字母只能是第 8 個字符。
對于 .net regex 引擎(不支持所有格量??詞),您可以使用原子組撰寫此模式:
^(?>[A-Z]{1,7})(?:[A-Z]\d?)?$
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371596.html
