簡體   English   中英

這兩個正則表達式語句有什么區別

[英]What is the difference between these two regular expression statements

([1|2|3|4|5|6|7|8|9])(1|2|3|4|5|6|7|8|9)

我想檢查思科交換機的每個端口是否有指定的命令集。 端口編號為1到9。使用正則表達式,我希望代碼選擇每個數字中的一個來驗證配置。

第一個正則表達式實際上沒有意義:它的意思是“選擇1或選擇|或選擇2或選擇3或...或選擇9”

第二個意思是“選擇1或選擇2或選擇3或...或選擇9”

我認為您在第一個正則表達式中尋找的正則表達式是([123456789]) ,它與第二個正則表達式完全等效。

為了使其更簡單,可以使用([1-9]) ,它僅表示一個范圍。

有關正則表達式的更多信息,尤其是與perl兼容的正則表達式(PCRE),請查看此處

第一個將匹配集合中的任何字符

| 123456789

第二個將匹配

1或2或3或4或5或6或7或8或9

第一個將匹配以下任何一個:

1 2 3 4 5 6 7 8 9 |

而第二個匹配以下任何一項:

1 2 3 4 5 6 7 8 9

請注意,第一個等效於: ([123456789|])

當然,可以解決您的問題的正則表達式(略)不同: ([123456789])([1-9])

正如其他人指出的那樣,“ |” 第一個顯然是錯誤的,因為不需要重復它,因此應該為[123456789]或[1-9]。 除此之外,還值得注意的是,在數字上下文中,此確切數據不會有功能差異,從而隱藏了邏輯錯誤,因為它們都只包含單個字符(第二個“字符串”恰好是單個字符) )。 但是,([[1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10])和(1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10)不會是即使在數值上下文中,功能上也相同,因為只有第一個匹配“ 0”(冗余的“ 1”以及無關的“ |”),只有第二個匹配10。注意,這可能進一步有助於弄清混亂和可能使這一點變得重要的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM