Debian

錯誤的正則表達式:無效的範圍結束

  • February 2, 2021

你能幫我解決這個正則表達式sourceslist.nanorc嗎?

正則表達式:

cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/

錯誤:

Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end

謝謝你。

問題很可能是-符號在您的字元列表中的位置。

您已經使用了字元範圍可以用 表示的事實,就像簡寫一樣(儘管請參閱下面的警告)。這意味著 the是一個特殊字元,如果它出現在兩個“正常”字元之間,則它被解釋為表示包含這兩個字元以及介於兩者之間的每個字元的另一個範圍。[*start*-*end*]``[a-z]``[abcdefghijkl...xyz]``-

當然,這僅在 之後的字元在-排序順序中按字典順序“較晚”然後是其前面的字元時才有效,這也是您的錯誤消息的原因(如果您說它會消失*,(-_儘管不會解決你的問題*)。

由於您顯然想要匹配文字-,並且取決於正則表達式在 中的解釋方式.nanorc,您要麼

  • 必須逃脫它(即\-),或
  • 在 POSIX 和 GNU 正則表達式中的標準字元列表(即或)中將它放在第一位或最後一位**,因此是 Linux 系統上最有可能的解決方案**。[-*etc*]``[*etc*-]

請參閱此處以獲取更多參考。

警告:上面的語句“[a-z]作為簡寫並不是無條件正確[abcdefghijkl...xyz]的!如何解釋範圍取決於語言環境設置,特別是排序規則。

  • 在“C”語言環境中,順序是根據 ASCII 碼值,即ABC...XYZ...abc...xyz. 在這裡,[a-z]實際上意味著“所有小寫字元”。
  • 在大多數其他語言環境中,大寫和小寫字元組合在一起,即順序為aAbBcC...xXyYzZ. 在這裡,[a-z]將意味著“所有小寫字元和所有大寫字元,除了Z.
  • 像“元音變音”這樣的非 ASCII 字元的處理是另一個問題。

有關該主題的進一步討論,請參見此處此處

引用自:https://unix.stackexchange.com/questions/562590