를 나타내는 설정 파일을 구문 분석합니다. 문자열이 "#"로 시작하면 전혀 캡처해서는 안됩니다.정규식은 # 기호는 주석을 문자열 내가 "테스트"군과 "안녕하세요"그룹을 캡처 둘 필요가</p> <pre><code>Test=Hello World #Some more text Test=Hello World </code></pre> <p>와
아래의 표현은 각각 제 1 및 제 2 문자열 일 :
^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])
^((?!#).+)(?:=)(.+[\S])
어떻게 논리적 OR이 비 캡처 정규식 그룹 사이의 비트를해야합니까?
나는
^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])|(?:.*)
같은 일을 시도했지만이 올바르게 동작하지 않습니다.
상세 정보
배경 :이 C의 # (.NET 프레임 워크 4.0)에서 수행되고있다. 파일을 한 줄씩 읽습니다. 등호 기호 왼쪽의 텍스트는 변수 이름을 나타내고 이퀄라이제 기호 오른쪽의 텍스트는 변수의 값을 나타냅니다. 이 파일은 설정 파일로 사용되고 있습니다.
일반의 경우 :
참고 : 모든 후행 공백 - 마지막 공백이 아닌 문자의 종료 후 공백을 캡처 할 수 없습니다. 여기에는 두 번째 그룹의 끝과 파운드 기호 사이의 간격도 포함됩니다.
1) 공백을 제외한 모든 문자 다음에 바로 이퀄라이제이션 기호가오고 바로 뒤에 공백 및 파운드 기호가 오는 문자 세트가옵니다. 예 :
this=is valid #text
s0_is=this #text
and=th.is #text
the=characters after the # Pound sign are irrelevant
2) 두 번째 캡처 그룹과 파운드 기호 사이에 후행 공백이없는 것을 제외하고 경우 1과 동일한 상황. 예 :
this=is valid#text
s0_is=this#text
and=th.is#text
the=characters after the# Pound sign are irrelevant
3) 1과 2의 경우와 같은 상황. 그러나, # 기호가 전혀없는 곳은 (후행 공백에 관한 위의 주를보십시오). 예 :
this|is valid
s0_is|this
and|th.is
the|characters after the
특별한 경우 :
를 | (기호 캡처 그룹을 구분하는 데 사용되는)은 이러한 경우의 세를 들어
this=is valid
s0_is=this
and=th.is
the=characters after the
캡처 그룹은 각각 다음과 같이한다 1) 줄의 첫 번째 문자는 # 기호입니다. 이로 인해 아무 것도 캡처되지 않습니다.
2) # 기호는 = 기호 바로 다음에 나타납니다. 이로 인해 두 번째 캡처 그룹이 null이됩니다.
3) # 기호는 앞서 명시 적으로 언급되지 않은 다른 곳에서 발생합니다. 이로 인해 아무 것도 캡처되지 않습니다.
4) 새 줄의 첫 번째 문자 앞에 공백이 없어야합니다. 그러나이 경우는 실제로 발생하지 않을 것입니다.
5) 이퀄라이제이션 직후의 공백은 유효하지 않습니다. (아무것도 캡처해서는 안)
잘못된 경우 :
th is=is not valid#text
nor =this#text
or_this=something
also= this
나는'(? :. *)'이 무의미한 것처럼 보인다고, 나는 그 사실을 표현하는 방법을 모른다. 나는 당신의 솔루션을 모두 시도했지만 그들은 나를 위해 일하지 않습니다. 'Hello World' 그룹과 함께 문자열의 일부 다른 텍스트 부분을 포함합니다. 뒤에 공백, 파운드 기호 및 그 이후의 모든 것을 포함하지 말아야합니다. – TehTechGuy
은 (. + \ S)의 욕심 많은 행동과 관련이 있으며, –
트릭을해야하는 게으른 대안 (. +? \ S)으로 변경해보십시오. 문자 클래스는 필요하지 않습니다. 단 한가지 : S –