2013-09-24 1 views
0

예 정규식 캡처하지 않습니다PHP 정규식 : 그룹 문자로 끝나야하지만이 문자를

/^([\w]+:)?other:(.*)$/ 

예를 문자열 :

test:other:words... 

첫 번째 그룹은 "테스트"와 일치하는 것입니다,하지만 난 원하는 그것은 단지 "테스트"를 캡처합니다.

/^([\w]+)?:?other:(.*)$/ 

을하지만 내가 하나의 을 가질 수 없습니다 실현 : 처음에 나는 생각를 처음에. 어떻게하면 존재하는 경우 으로 끝나는 그룹을 캡처 할 수 있습니까?:은 그룹에 캡처되지 않아야합니까?

예 입출력 :

randomString:constantString:somethingElse 

먼저 그룹으로 'randomString'를 제공한다.

그리고

constantString:somethingElse 

은 비어있는 첫 번째 그룹을 주어야한다

+0

입니다 첫 번째 앞에 오는 모든 것 : '^ ([^ :] +)'=) – Enissay

+0

@Enissay, no. 이 임의의 문자열은 필요한 문자만으로는 만들 수 없습니다. – Dalius

+0

비 캡처 또는 비 소모 일치? – dognose

답변

1

우리가 간다 :

^(?:(\w+):)?constantString:(.*)$ 

(:)이 내가 당신이 가지고있는 모든 상황을 잘 모르겠지만, 아마도이 얻을 쉽게 비 캡처 그룹

Demo

2

당신은 당신의 첫 번째 단어가 선택, 사용하고 싶다면 : 비 캡처로

/^(?:(\w+):)?other:(.*)$/ 

이 정규식하게 \w+: 전체적으로 그룹으로 분류하고 선택적으로 만듭니다. 또한 내부 캡처 그룹을 사용하여 \w+ 부분을 캡처합니다.

따라서 \w+:이있는 경우 그룹 1에는 \w+ 부분이 포함됩니다. 그렇지 않으면 빈 문자열이 포함됩니다. 여기

+0

하지만 첫 번째 그룹을 선택해야합니다. – Dalius

+1

@Dalius 샘플 입력을 게시하고 출력 할 수 있다면 더 좋을 것입니다. 실제로 원하는 것을 이해하는 것은 어렵습니다. –

+1

@Dalius. 수정 된 답변 –