簡體   English   中英

路徑驗證 - 我的 RegEx 匹配目錄名稱中的前導空格,但我無法修復它

[英]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.

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