2016-07-13 5 views
1

일치하는 문자열 (자리 표시 자)을 찾기 위해 문서를 검색하려고하는데 정규식을 올바르게 얻으려고 애 쓰고 있습니다.정규식 일치

나는이 형식이됩니다 찾기 위해 노력하고 문자열이,이 문서에 어디서나 찾을 수 있습니다

## MYPH [J @ _- JDF] ##

내가 사용하려고 정규 표현식은 다음과 같습니다

##MYPH\[([-!$%@^&*()_+|~=`{}:";'<>?,.\/]+(\w)+(\W)+)\]## 

##MYPH[]##은 항상 동일하지만 대괄호 사이에있는 텍스트는 무엇이든 될 수 있습니다. 결국 대괄호 안에있는 것을 반환해야합니다.

나는 이것을 테스트했지만 일치하지 않습니다.

나는 에 대해 +을 전환 한 다음 일치 항목을 얻었지만 괄호 안에 아무 것도 없을 필요가 없습니다. 나는 또한 *+을 완전히 제거했지만 여전히 일치하지 않습니다.

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+3

하지 당신은 [(.? *)'## MYPH \을 [] ##'] (https를 시도했습니다. com/r/nM6fA7/1)? –

+0

분명한 사실을 놓치 셨습니다! ## MPPH \ [. +? \] ## works! (함께 +) 당신이 대답으로 그것을 추가하면 그것을 받아 들일 것입니다. 보너스는 대괄호 사이에 텍스트를 가져 오는 방법을 말해 줄 수 있습니다. – Bex

+0

정규 표현식/언어 란 무엇입니까? 그러면 대답을 게시 할 수 있습니다. 또는 게시할지 여부를 적어도 이해합니다. –

답변

2

당신은 regex demo를 참조

##MYPH\[(.*?)]## 

사용할 수 있습니다. 이 정규식은 짧은 문자열에 좋습니다. 긴 메시지의 경우 펼쳐진 해당 ##MYPH\[([^]]*(?:](?!##)[^]]*)*)]## (this demo 참조)을 사용하십시오.

패턴 설명 :

  • ##MYPH\[ - 리터럴 ##MYPH[
  • (.*?) - (캡처 그룹 1) 어떤 0+ 문자 만까지 줄 바꿈 (도 줄 바꿈에 맞게 RegexOptions.Singleline 플래그를 추가) 첫 번째
  • ]## - 리터럴 문자열 ]##

C# demo는 :

var line = "##MYPH[[email protected]_-jdf]##"; 
var pattern = @"##MYPH\[(.*?)]##"; 
var m = Regex.Match(line, pattern); 
if (m.Success) 
    Console.WriteLine(m.Groups[1].Value); 

아니면 C# demo for multiple matches : // regex101 :

var line = "##MYPH[[email protected]_-jdf]####MYPH[[email protected]_-jdf]####MYPH[[email protected]_-jdf]####MYPH[[email protected]_-jdf]####MYPH[[email protected]_-jdf]##"; 
var pattern = @"##MYPH\[(.*?)]##"; 
var m = Regex.Matches(line, pattern) 
     .Cast<Match>() 
     .Select(p => p.Groups[1].Value) 
     .ToList(); 
foreach (var s in m) 
    Console.WriteLine(s); 
0

이 하나의 시도 :

##MYPH\[[\S]+\]## 
+1

'[\ S] +'='\ S +' –

+0

IF [\ S] + = \ S + 틀리지 않습니다. 고맙습니다. –

+0

질문에 따르면 [와] 사이의 부분은 무엇이든 될 수 있습니다. 이 정규식은 공백 문자를 찾지 않습니다. 또한 [와] 사이의 부분이 비어 있으면 일치하지 않습니다. 또한 두 개의 문자열이 서로 옆에있는 경우 두 번째 문자열의 끝이 실제로 첫 번째 문자열의 끝이라고 생각하면 한 번만 일치합니다. –