簡體   English   中英

C#正則表達式:檢查net use命令中的給定目錄是否包含空格

[英]C# Regex: Check if the given directory in a net use command contains whitespaces

我正在編程標准化批處理文件的工具,並且使用正則表達式來驗證其中的每個net use命令。

我被卡在命令的目錄下。 在這種情況下,該命令的標准語法為: net use [devicename]: [path] [/user:"\\domain\\user\u0026quot;] [password] [/persistent:no]其中[path]可以包含空格 如果true有要quotationmarks(" 。),否則必須沒有quotationmarks的用戶名和密碼是可選的路徑可以包含以下特殊字符( !,+.-


以下正則表達式允許 在引號中使用沒有空格的路徑,並禁止使用帶有引號不使用空格和引號的序列空格的路徑。 regex可能包含語法錯誤,我使用PCRE在regex101.com對其進行了測試:

Regex pattern = new Regex(@"^net use [a-z]:\s
(?(?=[\S]+\s[\S]+)(""\\\\[\w.\-,!+]+(\s[\w.\-,!+]+)*(\\[\w.\-,!+]+(\s[\w.\-,!+]+)*)*"")|
(\\\\[\w.\-,!+]+(\\[\w.\-,!+]+)*))
(\s\/user:""[a-zA-Z0-9]+(\\[a-zA-Z0-9]+)*"")?\s\/persistent:no$");

正則表達式的必要部分是:

(?(?=[\S]+\s[\S]+)(""\\\\[\w.\-,!+]+(\s[\w.\-,!+]+)*(\\[\w.\-,!+]+(\s[\w.\-,!+]+)*)*"")|
(\\\\[\w.\-,!+]+(\\[\w.\-,!+]+)*))

反之,我如何負擔表達呢?

我可以幫助您進行目錄匹配。

讓我們從可以為目錄添加前綴的方式開始。

./例如,。/ ./some/path/to/some/file.txt ./ ./some/path/to/some/file.txt ./ ./some/path/to/some/file.txt ./ ./some/path/to/some/file.txt ./ ./some/path/to/some/file.txt

../例如../some/path/to/some/file.txt

/例如/some/path/to/some/file.txt

<blank>例如some/path/to/some/file.txt

我們可以用這個正則表達式來描述它。

(\\.\\/|\\.\\.\\/|\\/)? 絕對難看,但它可以工作。

這是我們的正則表達式在濃縮成單線之前的放大圖。

"                   # opening quotation mark
(\.\/|\.\.\/|\/)?   # optional / ./ ../
[^\/"]++            # match content after opening / ./ ../
(\/[^\/"]++)+       # match /<CONTENT> repetitively
"                   # closing quotation mark

為了安全起見,將表達式包裝在空格(可能不止一個)中。 [ ]+

[ ]+"(\.\/|\.\.\/|\/)?[^\/"]++(\/[^\/"]++)+"[ ]+

只要路徑用引號引起來,它就應該與空格匹配。 這是我進行的一些嘗試

至於沒有用引號引起來的空格的路徑,請嘗試此正則表達式。

[ ]+(\.\/|\.\.\/|\/)?[^\/\s]++(\/[^\/\s]++)+[ ]+

它與其他正則表達式共享功能,因此希望您可以以此為參考來理解此正則表達式。 我不確定這在整體上對您的問題有多大幫助,但我想它應該對路徑部分有所幫助。

哦,使用它們結合,只是你的正則表達式or運營商, | 應該看起來像這樣:

(                                                # begin capturing group
[ ]+"(\.\/|\.\.\/|\/)?[^\/"]++(\/[^\/"]++)+"[ ]+ # paths with spaces
|                                                # or
[ ]+(\.\/|\.\.\/|\/)?[^\/\s]++(\/[^\/\s]++)+[ ]+ # paths w/o spaces
)                                                # end capturing group

祝好運!

暫無
暫無

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

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