2013-07-07 2 views
0

PHP 코드 (preg_replace)에서 정규식 연산을 수행하려고합니다. 지금은 함께 일하고 있어요 : 등 http://google.com 같은 URL을 일치PHP 용 정규식 패턴의 백 슬래시

|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i 

...하지만 지금은 내가 일치시킬 URL이처럼 또한 어떤 경우 같은데요?

http:\/\/asd.domain.com\/path\/of\/url\/something.else 

2x 백 슬래시 및 4x 백 슬래시로 시도했지만 작동하지 않는 것 같습니다.

어떤 조언이 필요합니까?

미리 감사드립니다.

+1

실제로 리터럴 백 슬래시가 포함되어있는 경우 해당 URL은 유효하지 않습니다. – arkascha

+0

글쎄, 나는 그것을 문자열로 취급하고 있으므로 중요하지 않습니다. 정규식으로 얻고 자하는 것은 유효한 URL로 만드는 것입니다. –

+0

이것은 원인을 해결하는 대신 작은 문제를 해결하려고하는 것처럼 냄새가납니다. 기대하는 구문을 확인한 다음 그 깨끗하고 유효한 정보로 작업해야하는 이유는 무엇입니까? 너 왜 갑자기 다른 표창을받는거야? 일반적으로 "둘 중 하나"입니다. – arkascha

답변

0

글쎄, 당신은 단순히 문자열과 일치하는 몇 백 슬래시를 추가하려면 : 그것은 여전히 ​​그 전에 일치 할 수있는 URL을 일치하도록

^http(s)?:\\?/\\?/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\\?/.*)?$ 

가 나는 ? 한정사를 사용했다. \은 이스케이프 문자이므로 두 번째 문자가 필요합니다. 첫 번째 문자는 두 번째 문자의 이스케이프 속성을 이스케이프 처리합니다. \.

demo을 참조하십시오 (정규식 테스터의 작동 방식 - 구분 기호는 슬래시이므로 이스케이프 처리 만합니다).

+0

백 슬래시를 이스케이프 처리하는 데 필요한 백 슬래시 수는 실제로 해당 패턴 문자열을 정의하는 _how_에 달려 있습니다.이 단계에서 해석 될 수 있기 때문에 ... – arkascha

+0

@arkascha 오른쪽. 어쩌면 이중 백 슬래시는 리터럴 정규식 문자열에 대한 것이라고 언급 했어야합니다. 이중 탈출은 너무 지루하지만 imo ^^; – Jerry