2013-01-08 5 views
-7

문제 설명 :정규 표현식

내가 좋아하는 두 개의 연속적인 특수 문자를 허용하는 정규 표현식을 구축하기 위해 노력하고있어 : /_ 또는 \\ 또는 ./ 또는 -- 또는 \- 또는 다른 조합 정규 표현식에서 특별한 charcters (./\_-)는 아래에 언급 :

^[a-zA-Z0-9\d]{1}[a-zA-Z0-9\d._/\-]{0,49}$ 

내가 잘못 여기서 뭐하는거야?

+0

멋진 특수 문자 (./_-) –

+0

편집하여 내 게시물의 의미를 엉망으로 만들지 않았는지 확인하십시오. – nhahtdh

+7

당신은 그렇게해야합니다. 이제 당신이 우리에게 자유로운 직장을 요구하고있는 것 같습니다. – zerkms

답변

2

mlorbetske의 정규식은 조건부 정규식의 사용을 제거하기 위해 약간 재 작성 될 수 있습니다. 또한 \d에 의해 덮여 있기 때문에 여분의 0-9을 정규식에서 제거합니다.

^[a-zA-Z\d](?:[a-zA-Z\d]|(?<![._/\\\-])[._/\\\-]){0,49}$ 

부분 (?:[a-zA-Z\d]|(?<![._/\\\-])[._/\\\-]) 경기 영숫자 문자 또는 특수 문자 ., _, /, \, - 그 앞에 문자가 이미 특수 문자가 아닌 경우. 또한 정규식이 유효성 검사에만 사용되는 것으로 보이기 때문에 그룹을 캡처하지 않고 (?:pattern)으로 만듭니다.

0- 너비의 룩어 - 배후 어설 션 (?<!pattern)을 사용하여 앞에있는 문자가 특수 문자가 아닙니다.

1

이 정규식은 내가 (선행 문자의 경우 전에 중간 들어가는 것을 나타 내기 위해 conditional(?true|false) 구문을 사용했습니다 예

Regex.IsMatch("a-12--3", Pattern); //false 
Regex.IsMatch("a-12-3", Pattern);  //true 

^[a-zA-Z0-9\d](?(?<=[\._/\\-])[a-zA-Z0-9\d]|[a-zA-Z0-9\d\._/\\\-]){0,49}$ 

을 요구하는 내용과 일치하는 것 그룹)은 구두점 문자 중 하나이며 구두점이 아닌 문자 만 따를 수 있습니다. 그렇지 않으면 지정된 문자가 허용됩니다.

(?<=expression) 구문은 zero-width positive look-behind입니다.

+2

조건부 구문을 사용하지 않도록 정규식을 다시 작성할 수 있습니다.'([a-zA-Z0-9 \ d] | (? nhahtdh

+0

@ nhahtdh 좋은 전화, 나는 그것을 upvote;) – mlorbetske

+0

어쨌든, 당신의 현재 정규 표현식이 문제가되지 않습니다. – nhahtdh