2016-09-14 3 views
3

="으로 시작하고 다음으로 끝나는 문자열을 가져와야합니다. ". 그러나 그것은 < 기호를 포함해야합니다.정규 표현식에 대한 조건을 추가하는 방법은 무엇입니까?

(="([^"])*<*") 

문자열 :

dit niet "dit wel" dit ook niet ="maar <dit ""en""dit ook" 
REM dit niet "dit <wel" dit ook niet ="maar dit ""en""dit ook" 
dit niet "dit wel" REM "maar dit ""en""dit ook" 

위의 코드는 나에게 두 개의 문자열을주고, 내가 하나가 아래에 언급 얻을 필요가있다.

예상 결과 :

="maar <dit " 

실제 결과 :

="maar <dit " 
="maar dit " 

참고 : 는 ="로 시작하고 <있는 모든 결과를 얻을 필요하고 "

답변

3
의 다음 항목으로 끝

="([^"])*<*" 정규 표현식 ="과 일치하면 "을 반복하여이 아닌 임의의 문자를 캡처하고 (따라서 마지막 항목 만 그룹 1 버퍼에 저장 됨) 기호 기호 " 다음에 이 표시됩니다. 그래서, 당신의 정규식은 < 일치하는 문자열에 존재해야합니다.을 : - - =" 순서

  • ([^"<]*<[^"]*) 그룹 1 값을 보유 할

    • =" : 당신은 regex demo

      세부를 참조

      ="([^"<]*<[^"]*)" 
      

      을 사용할 수 있습니다

      • [^"<]* - "<
      • < 이외의 0 개 이상의 문자 - < 기호
      • [^"]* - "
    • " 이외의 0 개 이상의 문자 - 따옴표
  • +0

    를 포함 할 수 있도록, 당신은'* +'보다는'*'사용을 고려해야합니다. 답은 일치하는 경우에 역 추적을 피하는 반면, 엔진은 일치하지 않는 경우에 시간을 낭비하여 문자를 포함 할 수없는 장소에서 문자를 검색합니다. – Holger

    +0

    @Holger JS 정규식은 소유량 한정 기호를 지원하지 않습니다. –

    +0

    이 질문에'[javascript]'*와 *'[java]'라는 태그가 붙어 혼란이있었습니다. 내 생각에, OP가 그들 중 하나를 결정해야합니다 ... – Holger

    2

    정규 표현식을 전환하십시오. 라이브

    (="([^"]*<[^"]*)*") 
    

    here

    이 부분 ([^"]*<[^"]*)에 불필요한 되돌아 신경 경우 내부 문자열이 <

    +2

    첫 번째'[^ "] *' 패턴이 유선형이 될 수있는 방법에 대한 내 대답을 참조하십시오. –