2011-01-11 3 views
1

정규식이 2 또는 1과 일치합니까?

\s*_{2}(\w+) 

임의의 공백, 밑줄 두 개, 한 단어. 그것은 밑줄이 없기 때문에 알아야 할 필요가 있습니다.

\s*(\w+) 

선택적 공백 뒤에 단어가옵니다. 그 다음 나는 그룹 1을 내 말로 사용한다. 여태까지는 그런대로 잘됐다.

두 개의 밑줄을 사용할 때 취하는 조치는 밑줄이 사용되지 않을 때 코드와 거의 동일합니다 (단, 플래그를 올리는 것을 제외하고).

if(s =~ uderscore) { 
    takeGroup(1) 
    yada yada 
    flag = true 
} else if(s =~ noUnderscore { 
    takeGroup(1) 
    yada yada 
    flag = false 
} 

더 좋은 방법이 있어야한다고 생각합니다. regexp 전체를 복제하는 대신에, 함께 테스트해라.

+0

'\ s * _ {2}? (\ w +)'당신을 위해해야합니다. –

+0

나는 깃발을 올릴 필요가 있는지 아는 것이 여기의 문제라고 생각한다. – OscarRyz

답변

6

사용 :

\s*(_{2})?(\w+) 

그런 다음 첫 번째 그룹의 존재를 간단하게 테스트 - 그것은이 있다면, 밑줄이 참석했다. 어떤 것은 다음 2

+0

첫 번째 그룹이 없으면 수정 (적어도 내 테스트에서). – OscarRyz

+0

@OscarRyz : 물론 - 그게 내가 "현재"라는 뜻입니다. – cdhowie

3
\s*(__)?(\w+) 

(__)?은 두 개의 밑줄의 선택적 그룹 그룹에 될 것입니다 그룹 1이었다. 그 단어는 1 대신에 그룹 2에있게됩니다. 그룹 번호 지정을 변경하지 않으려면 비 캡처 그룹 (?:__)을 대신 사용할 수 있습니다.

+0

아아, 내가 그걸 그룹화 할 때 내 다른 문제 (언급하는 걸 깜빡 했어.)가 바뀌 었어. 번호가 바뀌 었어. 그래서 2 ~ 3 개의 그룹이 있고 그에 따라 슬라이드하는 경우 추가 체크를 추가해야합니까? "비 캡처 그룹"은 무엇에 관한 것입니까? 내가 (깃발을 높이기 위해) 알아야 할 필요가 있기 때문에 (모든 도움을 줄 수 있다면) 모든 숫자를 변경하고 싶지는 않습니다 : P – OscarRyz

+0

비 포획 그룹을 사용하는 것과 그룹을 전혀 설정하지 않는 것의 차이점은 무엇입니까? – OscarRyz

+0

그룹은 밑줄을 함께 선택 가능하게 할 수 있습니다 (단지'__? '를했다면, 두번째 밑줄 만 선택 사항이됩니다). – Amber

관련 문제