2011-02-05 4 views
1

저는 ICSharp TextEditor 컨트롤을 사용하고 있으며 XML 파일을 사용하여 C# 정규식 엔진으로 다양한 구문 강조 섹션 (문자열, 설명 등)을 처리합니다. Regex 내에서 XML 각도 대괄호 벗어남

그래서 내가 (이 질문에서) 화음 기호에 맞게이 정규식을 사용하고있다 :

\b[A-G](?:add|maj|j|m|\+|b|\#|sus|\d|°)*(?:\b|(?<=\#)) 문제가

에서, < 기호 XML 구문의 일부입니다, 그래서 &로 교체 LT, 그것을 만드는 :

\b[A-G](?:add|maj|j|m|\+|b|\#|sus|\d|°)*(?:\b|(?&lt=\#))

문제는,이 작업을 수행 한 후, 때문에 잘못된 정규식의 프로그램이 충돌. 나는 그것을 좁혔다. 그리고 그것은 문제를 야기하는 것은 분명히 & lt이다.

< 꺾쇠 괄호를 이스케이프 처리하는 동시에 정규식 엔진에서 꺽쇠 괄호를 사용할 수있게하는 다른 방법이 있습니다.

+3

< (끝 부분에 세미콜론이 있음)은 알고 싶습니다. – anroesti

+0

아니요. 그러나 나는 그렇지 않습니다. – Miguel

답변

1

<에 대한 XML 엔터티는 &lt;이고 &lt이 아닙니다.

+0

원래 응답을 변경 한 이유는 무엇입니까? (도움이되었다고 생각합니다.) – anroesti

+0

죄송합니다. Firefox 베타를 사용하고 있으며 코드 태그를 추가 할 수 없었습니다. 나중에 고쳐서 마지막 답안과 관련이 없습니다.이 한가지 주셔서 감사합니다. – Miguel

+0

@Miguel : 문제 없습니다, 환영합니다. –

0

최초의 정규 표현식에서 토큰 (?<=\#)은 '긍정적 인 모습'이며,이 시점에서 되돌아보고 리터럴 파운드 기호 (이스케이프되었지만 , # 정규식 메타 문자가 아닙니다.)

캡쳐되지 않은 그룹을 원하는 경우, 원하는 것은 (?: *pattern*)입니다 (예 : (? : < = #). 레코드의 경우 'less than', 'equals'및 'pound'는 내가 아는 한 정규 표현식의 모든 일반 문자이며 이스케이프 할 필요가 없습니다.