2010-06-03 3 views
3

다음 두 개의 메시지가 있습니다. regular expressions (순서대로).이 두 정규식을 하나로 결합 할 수 있습니까?

1. ^~/buying/(.*)\?(.*) => foo= group 1 baa= group 2. 
2. ^~/buying/(.*)   => foo= group 1 baa= nothing/empty/null/baibai 

URL에 물음표가 있으면 두 그룹으로 나눕니다. 그렇지 않으면 첫 번째 그룹에 모든 것을 던지십시오.

내가 주문을 중요하게 생각하는 이유는 내가 반올림하면 '?' # 2 표현 (위)이 모두를 잡을 것이기 때문에 정규 표현식은 결코 해고되지 않습니다.

그럼 .. 다시 고칠 수 있습니까?

참고 : 디버그/조정할 수 있도록 using this website **을 시도했습니다.하지만 알아낼 수는 없습니다.

** 나는 해당 사이트와 아무런 관련이 없습니다. 물음표를 포함하지 않는 첫 번째 그룹을 캡처 -

^~/buying/([^?]*)\??(.*) 

([^?]*) :

+0

인가? 나는 당신이 그처럼 태그를다는 것을 제안한다. –

답변

5

이 시도.
\?? - 물음표 (선택 사항).
(.*) - 선택 사항 인 두 번째 그룹 - 비어있을 수 있습니다.

1

어떻게 바로 두 번째 부분은 옵션 (테스트되지 않은) 만들기에 대한 :

^~/buying/([^\?]*)(?:\?(.*))? 

?: 캡처에서 옵션 부분 (당신이 필요로하는 부분을 더한 물음표)을 방지 할 수있다.

편집 : 탐욕 때문에 부정적인 문자 클래스 [^ \?]를 사용하거나 게으르 게해야합니다. (역 추적을 줄이므로 반전 문자 클래스를 사용하는 것이 좋습니다.)

+0

나는 비슷한 것을 시작했다. '. * '는 처음부터 모든 것을 포착하고 두 번째 그룹은 비워두기 때문에 작동하지 않습니다. – Kobi

+0

"?"을 추가해야합니다. . * 직후에. 욕심을 없애기 위해서. – annakata

+0

@annakata - 끝 부분에'$'를 추가해야합니다. 그렇지 않으면 두 그룹 모두 항상 비어 있습니다! – Kobi

0

또한 이처럼 쉽게 가입 할 수 있습니다. 이 펄은

^~/buying/(.*)(\?(.*))?$

+0

작동하지 않습니다 - LC에 대한 내 의견을 참조하십시오. 비 탐욕스럽고 끝 부분에'$'를 추가 할 수 있지만 더 이상 이해하기 쉽지 않습니다 :) – Kobi