[英]Path validation - My RegEx is matching a malformed path and I can't figure out why
[英]Path Validation - My RegEx is matching leading spaces in directory names and I can't fix it
我又回來了,帶着更多的 RegEx 惡作劇。
我有我認為是完美的 Windows 路徑驗證表達式。
這是 Regex101: https ://regex101.com/r/BertHu/6
^(?:(?:[a-z]:|\\\\[a-z0-9_.$●-]+\\[a-z0-9_.$●-]+)\\|\\?[^\\\/:*?"<>|\r\n]+\\?)(?:[^\\\/:*?"<>|\r\n]+\\)*[^\\\/:*?"<>|\r\n]*$
分解:
# (?:(?:[a-z]:|\\\\[a-z0-9_.$●-]+\\[a-z0-9_.$●-]+)\\| # Drive
# \\?[^\\\/:*?"<>|\r\n]+\\?) # Relative path
# (?:[^\\\/:*?"<>|\r\n]+\\)* # Folder
# [^\\\/:*?"<>|\r\n]* # File
我現在遇到的問題是表達式匹配路徑與目錄中的前導空格。
示例: C:\\ Leading Space\\ Shouldnt Match
匹配。
我嘗試將[^\\s]
添加到表達式的文件夾部分:
(?:[^\\s][^\\\\\\/:*?"<>|\\r\\n]+\\\\)*
但這只會使第一個路徑段中的前導空格無效:
C:\\ LeadingSpace\\ShouldntMatch
不匹配(好)
C:\\LeadingSpace\\ ShouldntMatch
匹配不正確(錯誤)
我認為問題出在這里:
如果有人可以幫助或指出我正確的方向,那就太好了。
抱歉所有正則表達式問題!
好吧,這取決於確切的規則是什么,如果我以您的regex101腳本為基礎,我會說:
文件、文件夾和相對文件夾或多或少相同(如果您忽略無捕獲組和反斜杠):
\\?[^\\\/:*?"<>|\r\n]+\\?
(?:[^\\\/:*?"<>|\r\n]+\\)*
[^\\\/:*?"<>|\r\n]*
所以有三個潛在的地方,文件夾可以從一個前導空格開始。
你可以像這樣在所有人面前添加一個[^\\s]
^(?:(?:[a-z]:|\\\\[a-z0-9_.$●-]+\\[a-z0-9_.$●-]+)\\|\\?([^\s][^\\\/:*?"<>|\r\n])+\\?)(?:[^\s][^\\\/:*?"<>|\r\n]+\\)*([^\s][^\\\/:*?"<>|\r\n])*$
我保存了修改后的 regex101 https://regex101.com/r/Pd3lcR/1
現在它應該可以工作,至少對於我有限的測試用例和有關限制的信息。
順便說一句:我不知道你的用例是什么,但是這個正則表達式對於簡單匹配和文件名捕獲來說很長,可能有一種更易讀的方式(對於非正則表達式的人)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.