2012-02-05 3 views
2

이 캡처의 하위 문자열 제외 학술 질문의 어떤 종류, 난 그냥이 결과에서 제외 문자열이있는 그룹 (PHP는 preg_match() 함수의 사용에 f.e.)를 캡처 할 수 있습니다 궁금합니다. 정규식 수준에서이 문제를 해결하는 데 관심이 있습니다. 내가 말하고자하는 바를 설명하겠습니다. 이 별도로 둘 필요 문자열과 일치하는 것이 가능하다는 것을,PRCE : 그룹 결과

Array 
(
    [0] => %**NOT_IMPORTANT_THAT_WILL_BE_HERE**% 
    [1] => needed_NUMERIC_substr_1 need_NUMERIC_substr2 
) 

내가 이해 :

... 
... needed_NUMERIC_substr_1 not_needed_ALPHA_substr need_NUMERIC_substr2 ... 
... 

이 가능 반환 정규 표현식을 작성하는 것입니다 : 같은

철, 나는 소스 문자열이 다른 캡처 그룹을 사용하고 코드에서 필요한 작업을 수행 할 수 있습니다. 이것은 학문적 관심사 일뿐입니다.

나는 조건 서브 패턴 또는 내다lookbehind 제로 폭 주장을 사용하는 방법에 대한 생각했지만, 발견 솔루션 수 없습니다. 가능하다면 어떻게 달성 될 수 있습니까?

+2

나는 그것은 캡처 그룹이 전체 텍스트를 일치하기 때문에 그런 식으로 일을 비논리적입니다 ... 그것을 의심. 그것은 match_and_postprocess가 아닌'match'입니다.) – Vyktor

+0

Thx @Vyktor는 비논리적이고 너무 복잡하다는 데 동의합니다. 그러나 나는 아직도 궁금해. – Milkywayfarer

+0

@Shiplu, 이것은 기본 숙제가 아닙니다. 그것은 내 자신의 학문적 관심사입니다. – Milkywayfarer

답변

1

아니 그것은 불가능합니다.

preg_match

함께 일치하는 그룹에 참여하거나 삭제하는 방법을 어떤 옵션 (빈 문자열로 대체) 일치하는 텍스트의 일부를 제공하지 않습니다.

+0

정규식 레벨은 어떻습니까? 그것에 완벽하게 해결할 수 있습니까? – Milkywayfarer

+0

@Milkywayfarer 미안하지만 그 질문을 이해할 수 없습니다. – Vyktor

+0

정규식 내부에 논리를 추가 할 수 있다면 어떨까요? 나는 조건부 subpaterns가다는 것을 알고있다. 그들이 어떻게 든 그들 또는 다른 고급 정규식 기능으로 어떻게 든 달성 될 수 있습니다. – Milkywayfarer

1

질문은 실제로 입력 문자열 123abc456에서 123456을 얻는 방법 인 것 같으므로 preg_match을 사용하지 않을 것입니다. 대신 preg_replace을 사용하고 자리가 아닌 모든 것을 빈 문자열로 바꿔 효과적으로 삭제할 수 있습니다.

$string = '123abc456'; 
$result = preg_replace('/[^0-9]/', '', $string); 
echo $result; // prints 123456 
+0

Thx 답장을 보내고 싶습니다.하지만 질문은 정규식 수준에서 수행하는 방법에 관한 것입니다. 원칙적으로 가능하다면 ... – Milkywayfarer

+0

@Milkywayfarer, 실제로'preg_replace'는 정규식을 사용합니다. 내 업데이트 답변을 참조하십시오. – Arjan

+0

thx 나는이 방법을보고 분명히 이해하고 있으며 이는 일반적인 방법이며 올바른 실제 해결책이라고 생각합니다. 그러나 제 관심은 실용적이지 않으며 학문적입니다. 정규식으로 만 이것을 해결할 수 있는지 명확히하고 싶습니다. F.e. 123abc456 '과 일치하고 캡처 그룹 중 하나에서'123456 '만 반환하는 그런 정규식을 작성하십시오. – Milkywayfarer

1

불가능합니다. 그룹 캡처를 캡처하면 입력 문자열의 부분 문자열 만 계속 표시됩니다 (또는 전혀 표시되지 않음).

+0

Thx. 이것에 대한 투표가 지금은 불가능하다는 것 같습니다 : 4 : 0. – Milkywayfarer