2016-06-29 1 views
0

배치 파일을 표준화하는 도구를 프로그래밍하고 정규식을 사용하여 각 net use 명령의 유효성을 검사합니다.C# Regex : net use 명령의 주어진 디렉토리에 공백이 있는지 확인하십시오.

명령에 지정된 디렉토리에서 멈추었습니다. 이 경우 명령의 표준 구문은 이며 [path]공백을 포함 할 수 있습니다. 이 quotationmarks (") 사이에 있어야한다 true 경우, 그렇지 않으면 quotationmarks 수없는 것으로합니다. 사용자 및 암호는 선택 사항입니다. 경로에는 다음 특수 문자 (!, ,, +, ., -)가 포함될 수 있습니다.


다음 일반 식 는 공백없이 quotationmarks에서 경로 수 있으며 허용하지 공백없이 quotationmarks 또는 서열 공백이있는 경로을 quotationmarks.

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.\-,!+]+)*)) 

어떻게 그 반대의 경우도 마찬가지 그것을 할 표현을 감당할 않는 정규식 내가 PCRE와 regex101.com에 그것을 테스트, syntaxerrors를 포함 할 수있다?

답변

1

나는 디렉토리 일치에 당신을 도울 수있다.

디렉토리를 접두사로 사용할 수있는 방법부터 살펴 보겠습니다.

././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 

안전을 위해 공백으로 식을 감싸 웁니다. 그들은 따옴표에 싸여있는 것처럼 [ ]+

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

이는 긴 공백이있는 경로와 일치해야합니다. Here are some trials that I ran with it.

따옴표로 묶이지 않은 공백이없는 경로는이 정규식을 사용하십시오.

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

다른 정규 표현식과 기능을 공유하므로이 점을 이해하기위한 참조 점으로 사용할 수 있기를 바랍니다. 이 문제가 전반적으로 얼마나 도움이되는지 확신 할 수 없지만 경로 부분에 약간의 빛을 비춰 주어야합니다.

아, 함께 사용하려면 정규 표현식 or 연산자 | 만 사용하십시오. 다음과 같이 표시되어야합니다.

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

행운을 비네!

+0

공백이있는 표현식은 공백없이 인용 부호로 묶인 경로를 허용합니다 ([link] (https://regex101.com/r/fM2rF5/1)). 이것을 거부 할 수있는 방법이 있습니까? 예를 들어 경로에 적어도 하나의 공백이 있어야하는 조건식을 예로들 수 있습니다. –

+0

@RNGsusCryst는 공백이없는 경로는 따옴표를 사용하는 것이 문제가됩니까? 그럼에도 불구하고 유효한 형식화가 아닌가요? (? <=!) (? : \. \/| \. \. \/| \ /) [^ \ s] + (?! ") (? = \ s) – wpcarro

+0

@RNGsusCryst' s)'이것은 귀하가 귀하의 의견에 묘사 한 경로에만 일치합니다. 이전에 제공 한 링크에서 사용해보십시오. 당신이 어떻게이 모든 것을 결합 할 것인지 잘 모르겠다. – wpcarro

관련 문제