매우 간단한 PHP 솔루션 (URL을 알고있을 때)은 이와 같을 것입니다.
$url = "http://www.ebay.com/itm/4-American-Racing-TORQUE-THRUST-2-II-Wheels-Torq-17x8-VN5157866-5x4-5-4-75-BS/281734025776#rpdCntId";
preg_match('~/itm/.*?/(\d+)~i', $url, $m);
$id = $m[1];
echo $id; // outputs: 281734025776
정규 표현식 패턴 ~/itm/.*?/(\d+)~i
은 단순히 '/itm/{SOMETHING}/{ROW_OF_DIGITS}'
에 대한 귀하의 입력 문자열을 검색하여 (찾을 때)에만 {ROW_OF_DIGITS}
부분을 추출합니다. 패턴 끝의 수정 자 i
은 선택 사항입니다. 대/소문자를 구분하지 않고 검색하도록 사용했습니다.
더 우아하고 바람직한 해결책은, 그렇지 않으면 결과 부울 false
를 반환 함수에게 인수 $url
이 항목의 유효 이베이의 URL을 때 이베이 항목의 ID를 반환 GetEBayId($url)
function GetEBayId($url) {
if (is_string($url))
preg_match('~/itm/.*?/(\d+)~i', $url, $m);
return isset ($m[1]) ? $m[1] : false;
}
PHP 함수를 사용하는 것입니다. 쉽게 여러 개의 입력에 대해 그것을 테스트 할 수 있습니다 지금
... 출력 위
$urls = array (
"http://www.ebay.com/itm/2013-Harley-Davidson-Touring-/112204342340?forcerrptr=true&hash=item1a1fe66444:g:wDUAAOSwgZ1Xv6xq&item=112204342340",
"http://www.ebay.com/itm/1956-Harley-Davidson-Touring-/?forcerrptr=true&hash=item1c75363d5a:g:dkMAAOSw0OBYKP9A&item=",
"http://www.ebay.com/itm/2010-Harley-Davidson-Touring-/122233680189?forcerrptr=true&hash=item1c75b1f13d:g:HFIAAOSwNRdX9tcg&item=122233680189",
"http://stackoverflow.com/",
"http://www.ebay.com/itm/2004-Harley-Davidson-Touring-/132002578508?forcerrptr=true&hash=item1ebbf7804c:g:aOEAAOSwal5YKPHd&item=132002578508",
"http://www.ebay.com/itm/2015-Harley-Davidson-Touring-/132002811098?forcerrptr=true&hash=item1ebbfb0cda:g:AM4AAOSwB09YD2Wv&item=132002811098"
);
foreach ($urls as $url)
var_dump (GetEBayId($url));
예 :
string '112204342340' (length=12)
string '' (length=12)
string '122233680189' (length=12)
boolean false
string '132002578508' (length=12)
string '132002811098' (length=12)
자바 스크립트 정규식 기능 (예 : String.match()
등의 작업)이 패턴을 사용하여 이베이 상품의 ID를 추출합니다.
당신이 당신의 입력 URL을 대신 표현을 다음 ebay.com 도메인 사용에서 오는 있는지 확인 얻고 싶은 경우에
/\/itm\/.*?\/(\d+)/i
. 자바 스크립트 참고
/^(?:https?:\/\/)?(?:www\.)?ebay\.com\/itm\/.*?\/(\d+)/i
PHP에 대한
~^(?:https?://)?(?:www\.)?ebay\.com/itm/.*?/(\d+)~i
:이 패턴은 두 이상, 또는 어떤 www.
접두사로 http
및 https
프로토콜을 ebay.com 도메인의 URL을 허용 (또는 없음). 자바 스크립트 정규식 패턴은 PHP와 함께 사용하는 것이 유효하지만 그 반대는 사용할 수 없습니다. 패턴 구분 기호 /
은 JavaScript와 함께 사용되지만 PHP에서는 구분 기호 ~
이 유효하지 않습니다 (JS는 슬래시가 구분 기호로 사용되어야하며 PHP는 일부 다른 문자도 허용 함). 위의 표현식을 사용하면 아래 URL 패턴 만 유효합니다.
http://www.ebay.com/itm/...
https://www.ebay.com/itm/...
http://ebay.com/itm/...
https://ebay.com/itm/...
www.ebay.com/itm/...
ebay.com/itm/...
01,다른 솔루션보다 REGEX가 필요한 이유는 무엇입니까?
정규 표현식은 일부 패턴을 텍스트와 대조하는 데 매우 유용합니다. 디버깅에 조금 어려워 지지만 코드를 간단하고 읽기 쉽게 유지합니다. 이 특정 경우, eBay가 자신의 URL 패턴을 변경하기로 결정했을 때이 작은 조각의 정규식을 업데이트해야합니다. 그렇지 않으면 문자열 조작을위한 함수 (예 : explode
, substr
, str_replace
등)를 사용할 때 전체 코드를 수정하거나 새 코드로 다시 작성해야 할 수 있습니다.
거의 모든 프로그래밍 언어는 현재 일부 정규식 라이브러리 (예 : PCRE
, RE2
, JRegex
등)를 지원합니다. 이 라이브러리는 regex 엔진이라고도합니다.
Enjoy;)
어떤 언어를 사용하고 있습니까? 질문이 도움이 될 사람을위한 더 많은 설명이 필요합니다. – charlietfl
나는 당신이 URL에서 ID 부분을 얻고 싶다는 것을 읽은 것으로 가정하고 있습니다. 방금 여기에 대한 자세한 답변을 http://stackoverflow.com/a/40700130/2584392에 작성했습니다. 저쪽에있는 코드를 사용할 수도 있습니다. – georoot
와우 이것은 내 이해를 훨씬 뛰어 넘습니다. URL을 미리 알지 못하고 브라우저에서 가져와야하는 경우 작동합니까? –