C #으로 변환 된 다음 컴파일되는 사용자 지정 프로그래밍 언어를 개발 중입니다. 아래를 달성하는 방법.
아래는 내 사용자 정의 언어 샘플입니다.
Input
{
//variables are assigned here
}
Logic
{
//Logic is defined here
}
Output
{
//Output here
}
위의 코드에서 입력, 논리 및 출력을 세 개의 문자열로 분리하고 싶습니다. 중간 부분에는 호환되는 C # (Java 와도 공통) 코드가 있습니다. RegEx를 사용하여이 세 블록을 분리하는 가장 좋은 방법은 무엇입니까?
실제 코드가 C #이기 때문에 과도하다고 생각하기 때문에 파서를 사용하지 않습니다.
이것을 시도 할 수 있습니다.
Input[^\{]*\{([^\}]*)\}\nLogic[^\{]*\{([^\}]*)\}\nOutput[^\{]*\{([^\}]*)\}
그룹 1,2,3에는 입력, 논리 및 출력 내용이 있습니다.
편집 : 당신이 지적했듯이 그 안에 중괄호도있을 수 있습니다. 그래서 이것은 업데이트 된 정규식입니다.
Input(.*)Logic(.*)Output(.*)
다음은 C #의 샘플 코드입니다.
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"Input(.*)Logic(.*)Output(.*)";
string input = @"Input
{
{input is here}
}
Logic{
logic is here
}
Output{
output is here
}";
RegexOptions options = RegexOptions.Singleline;
Match match = Regex.Match(input, pattern, options);
Console.WriteLine("'{0}' found at index {1}", m.Value, m.Index);
}
}
그러나 솔직히 말하면 다른 많은 상황이 발생할 수 있습니다. 논리, 입력 및 출력도 코드 내부에 올 수 있습니다. 그러므로 블록을 분리하기 위해 다른 것을 사용하는 것이 현명 할 것입니다. {}를 사용하는 대신 가능성이 낮은 것을 사용할 수 있습니다. # START # # END #라고 말하세요.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다