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