2017-11-25 1 views
0

동일한 문자열에서 여러 번 일치 시키려면 정규 표현식을 일치시켜야합니다. 패턴 후 알파벳 0 이상의 숫자, 알파벳이고, 대장은 순방향 알파벳은 후방 저 8로 발생 주어야 다시 하나 개 이상의 숫자, 예 w:/a\bc::/12\xyz위한 알파벳문자열에서 여러 번 일치 Regex

슬래시, 하나 이상의 숫자를 슬래시.

는 다음 코드
Regex a11 = new Regex(@"([a-z]+[a-z1-9:]+/[a-z1-9]+\\[a-z1-9]+)+"); 
Regex a1 = new Regex(@"([a-z]+/[a-z1-9]+\\[a-z1-9]+)+"); 
var a = a11.Matches(@"w:/a\bc::/12\\xyz"); 

을 시도했지만 한 번만 경우에도 여러 번 일치합니다. 또한 패턴에서 두 번째 문자는 선택 사항이므로 두 개의 정규식을 선언했습니다. 단일 정규식에서 모든 것을 수행 할 수있는 방법이 있습니까? 어떤 도움을 많이 주신 경우

"a"는 하나만 일치합니다.

+1

정규식 변수를 사용하는 나머지 코드를 보여줍니다. –

+0

귀하를 도와 드릴 수있는 충분한 정보를 저희에게 제공하지 않았습니다.게시물을 편집하여 더 많은 코드를 제공 할 수 있습니다. https://stackoverflow.com/help/how-to-ask –

+0

내 코드 – saravana14

답변

0

입력 문자열에서 하나의 동일한 위치에서 시작하는 모든 부분 문자열을 생성 한 다음 ^$ 앵커로 묶은 패턴을 사용하여 전체 문자열 일치를 테스트해야합니다.

var s = "w:/a\\bc::/12\\xyz"; 
var r = new Regex(@"^\p{L}+[\p{L}\d:]*/[\p{L}\d]+\\[\p{L}\d]+$", RegexOptions.Compiled); 
for (var q = 0; q < s.Length; ++q) 
    for (var w = q; w <= s.Length; ++w) 
    { 
     var cur = s.Substring(q, w-q); 
     if (r.IsMatch(cur)) 
      Console.WriteLine("FOUND: {0}", cur); 
    } 

출력 :

FOUND: w:/a\b 
FOUND: w:/a\bc 
FOUND: bc::/12\x 
FOUND: bc::/12\xy 
FOUND: bc::/12\xyz 
FOUND: c::/12\x 
FOUND: c::/12\xy 
FOUND: c::/12\xyz 

C# demo 모두보기

는 것을 할 수있는 방법입니다. 문자열의 시작
  • \p{L}+ - - 1 + 문자는
  • [\p{L}\d:]* - 0+ 문자, 숫자 및/또는 :

    패턴에 대한 자세한 사항

    • ^

      ^\p{L}+[\p{L}\d:]*/[\p{L}\d]+\\[\p{L}\d]+$ 
      

      입니다

    • / - / 문자
    • [\p{L}\d]+ - 1 + 문자 및/또는 숫자
    • \\ - \ 문자
    • [\p{L}\d]+ - 1 + 문자 및/또는 숫자
    • $
    • - 문자열의 끝.

    regex demo at regex101.com을 참조하십시오.

    참고 : 만 ASCII 문자와 일치, 패턴 어디에서나 [a-zA-Z]@"^[a-zA-Z]+[a-zA-Z\d:]*/[a-zA-Z\d]+\\[a-zA-Z\d]+$"\p{L}를 교체하십시오.