정규식에 대해 배우려고합니다. 여기
내가 일치거야 무엇 :정규 표현식 : 쿼리 문자열 매개 변수 일치
/parent/child
/parent/child?
/parent/child?firstparam=abc123
/parent/child?secondparam=def456
/parent/child?firstparam=abc123&secondparam=def456
/parent/child?secondparam=def456&firstparam=abc123
/parent/child?thirdparam=ghi789&secondparam=def456&firstparam=abc123
/parent/child?secondparam=def456&firstparam=abc123&thirdparam=ghi789
/parent/child?thirdparam=ghi789
/parent/child/
/parent/child/?
/parent/child/?firstparam=abc123
/parent/child/?secondparam=def456
/parent/child/?firstparam=abc123&secondparam=def456
/parent/child/?secondparam=def456&firstparam=abc123
/parent/child/?thirdparam=ghi789&secondparam=def456&firstparam=abc123
/parent/child/?secondparam=def456&firstparam=abc123&thirdparam=ghi789
/parent/child/?thirdparam=ghi789
내 표현은 "횡령"는 및 def456을 ABC123한다.
그리고 지금 내가 일치하지 않을거야 일에 대해 단지 예 ("물음표"가없는) :
^(?:/parent/child){1}(?:^(?:/\?|\?)+(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?)?
그러나 아무튼 :
/parent/child/firstparam=abc123&secondparam=def456
를 글쎄, 난 다음 식을 내장 일하지 마라.
내가 잘못하고있는 것을 이해하도록 도와 줄 수 있습니까?
미리 감사드립니다.
1
UPDATE 확인은, I는 다른 시험을했다. 나는 이런 식으로 뭔가에 이전 버전을 해결하기 위해 노력하고있어 :
/parent/child(?:(?:\?|/\?)+(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?)?$
내 아이디어를 설명하자
가/부모/자녀와 함께 시작해야합니다 : 그룹에 이어
/parent/child
는 선택 사항입니다
(?: ...)?
이전 옵션 그룹은?으로 시작해야합니다. 또는?
(?:\?|/\?)+
선택적 매개 변수 (지정된 매개 변수는 쿼리 문자열의 일부인 경우 내가 값을 잡아)
$
어떤 조언 라인
의(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?
끝? 내 솔루션은 단지 정규 표현식을 기반으로해야합니다 2
UPDATE.
/parent/child(?:[?&/]*(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*))*$
그리고 그것은 꽤 좋은 작동합니다 그냥 예를 들어, 나는 이전 한 다음를 썼다. 그러나 너무 다음과 같은 입력과 일치 :
/parent/child/firstparam=abc123&secondparam=def456
어떻게 이전 문자열과 일치하지 하기 위해 표현을 수정할 수?
가능한가요? 항상이 구조를 가지고 있습니까? – FailedDev
@FailedDev 예, 그렇습니다. – NicolaBaldi
@NicolaBaldi 내 대답을 참조하십시오. 이것에 정규 표현식을 사용하지 마십시오. 당신이 할 수있는 작업을 간단한 문자열 처리 함수로 해결할 수 있어야합니다.) 정규식은 값 비싼 도구입니다. – gaussblurinc