2017-04-06 1 views
0

이 내가 정규 표현식 구문 분석하는 데 노력하고있어 전체 문자열입니다 : 내가 좋아하는 것 정규 표현식

example.com/newsite.com.html?var=/newsite.com&var=newsite.com 

문자열 만있는 경우의 newsite.com 부분과 일치 할 수 있도록 ? 기호 다음에 나타나지 않습니다.

현재, 나는 단지 지금까지 왔 : 대신 첫 번째의 newsite.com의 모든 인스턴스를 선택

/newsite.com/g 

합니다.

example.com/newsite.com.html?**************************** 
+0

'[^?] *'는 (는)'?' – Havenard

+0

고마워, 근데 어떻게 쓸거야? – Rtsne42

답변

0

이 내가 생각 해낸 해결책은, 그것은 방탄 아니지만 대부분의 경우 작동합니다

(?<=[^=]\/)newsite\.com 

그것은 아무것도 무시 =으로 시작하고 처음에는 /이 아닙니다.

"긍정적 인 lookbehind"를 지원하는 regex 구현에서만 작동한다는 점에 유의하십시오.

0

당신은 할 수 있습니다 여기에

* 모든 것을 나타냅니다 나는 기본적으로 newsite.com의 첫 번째 발생을 일치 무시하고 싶습니다 : 편집 http://regexr.com/3fmre

는 정규 표현식 놀이터에

링크 제외 그룹 인 [^?]을 사용하면 지정된 기호 이외의 모든 기호와 일치합니다. a a ?. 표현 /^[^?]*/은 예를 들어 ? (일치 항목의 일부가 아님)을 찾을 때까지 시작부터 모든 것을 일치시킵니다.

newsite.com부터 시작하여 일치 시키려면 /newsite\.com[^?]*/ 또는 ?부터 /[^?]*$/까지 사용할 수 있습니다.

mod-rewrite으로 태그되었으므로 %{QUERY_STRING}을 조건으로 사용할 수 있습니다. 검색어 문자열은 기본적으로 전체 URL에서 ? 뒤에 오는 것을 호출하는 방식입니다.

예를 들어 RewriteCond %{QUERY_STRING} newsite.com을 사용하면 검색어 문자열에 newsite.com이있는 경우에만이 조건을 따르는 RewriteRule이 적용된다는 것을 의미합니다.

+0

감사하지만 작동하지 않는 것 같습니다. '? newsite.com '이 나온 후에도 모든 것을 무시하려고합니다. – Rtsne42

+0

@ Danchm01 아마도 당신이하려는 일을 정확히 말해야합니다. – Havenard

+0

'% {QUERY_STRING} '을 지적 해 주셔서 감사합니다. 실제로 유용 할 수도 있습니다. 정규 표현식에 대한 예제는'newsite.com'과 일치하지만'newsite.com '과 일치하지 않습니다.하지만'newsite.com.html'과 같이'? '뒤에 나오는 모든 것을 무시하려고합니다. *************''*'가 무시되는 부분 – Rtsne42

-1

여기에 그 일을 두 가지 방법 ..

 var str = "example.com/newsite.com.html?var=/newsite.com&var=newsite.com"; 
 
//1. Look for ? and get the substring from 0 to the foundAt value 
 
     var foundAt = str.indexOf('?'); 
 
      document.getElementById("substr").innerHTML = str.substr(0,foundAt); 
 
      
 
//2. Using regex find the location of occurence of newsite.com and ignore rest   
 
var str = "example.com/newsite.com.html?var=/newsite.com&var=newsite.com"; 
 
    var loc = str.search(/newsite\.com[^?]*/); 
 
    document.getElementById("substr").innerHTML = loc;
<p id="substr"></p>

+0

응답 해 주셔서 감사합니다. 이것은 하나의 해결책이 될 수 있지만 전체 프로그래밍 언어가 아닌 정규 표현식 만 사용할 수 있습니다. 그래서 JavaScript를 사용하지 않고 배열 인덱스로 문자열을자를 수 있습니다. – Rtsne42

+0

게시물에 apache/mod-rewrite 태그가 붙어있어서 JS가 관련되어 있거나 현재 시점에서 사용 가능하지 않습니다. – Capsule

2

당신은 RewriteCond를 사용하고 REQUEST_URI 만 테스트 할 수 있습니다. QUERY_STRING 그렇게 REQUEST_URI의 일부가 아닌, 뭔가 같은 :

RewriteCond %{REQUEST_URI} newsite\.com 
RewriteRule your rules if the cond if matched 
+0

이것은 실제로 내가 지금하려고하는 것입니다. 그러나 이렇게 일반적인 이름을 갖고 싶어서 붙어 있습니다 :'RewriteCond % {REQUEST_URI} % {SERVER_NAME} '하지만 작동하지 않는 것 같습니다. 이유를 모르겠습니다. 조건의 두 번째 부분에서 변수가 허용되지 않습니까? – Rtsne42

+0

또한 작동하는 경우 변수 값의 중간에 점을 어떻게 피할 수 있습니까? 추신 'REQUEST_URI' **에는 ** QUERY_STRING'이 포함되어 있습니다. 그러나 항상 쿼리 문자열에서'! newsite \ .com'를 항상 테스트 할 수 있으므로 중요하지 않습니다. – Rtsne42

+0

Apache 설명서에 따라 포함하지 않아야합니다. "REQUEST_URI 요청 된 URI의 경로 구성 요소 (예 :"/index.html "). 특히 QUERY_STRING이라는 자체 변수로 사용할 수있는 쿼리 문자열은 제외됩니다." http://httpd.apache.org/docs/current/mod/mod_rewrite.html – Capsule