2017-10-11 10 views
1

큰 약품 처방집의 정규식 검색을 시도하고 있습니다. 특정 약의 이름과 일치해야하고 약 이름이 다시 반복되거나 EOF에 도달 할 때까지 모든 문자를 포함해야합니다.문자열의 모든 인스턴스를 가져오고 그 사이에 텍스트를 포함하십시오.

내가 가장 가까이 온 것은 QUILLIVANT.+?(?=QUILLIVANT)과 같은 긍정적 인 lookaheads를 사용하고 있지만 "QUILLIVANT"라는 단어가 하나만있는 경우에는 캡처되지 않습니다. 또한 온라인 정규식 테스트에서 "Catastrophic Backtracking/Runaway Regular Expression"으로 표시됩니다.

따라서 주어진 입력 blahblahblah Quillivant 40MG derp derp derp Quillivant 60MG/5ML Syrup durka durka durka 필요한 창은 Array[0] = "Quillivant 40MG derp derp derp ", [1] = Quillivant 60MG/5ML Syrup durka durka durka

답변

0

먼저 문제가있을 때의 경우에도 계정하는 룩어 끝에 |$을 첨가하여 해결할 수있는 QuillivantQuillivant 후 없음

/QUILLIVANT.+?(?=QUILLIVANT|$)/i 

this regex demo을 참조하십시오.

단지 unroll the pattern보다 강력한 패턴을 만들려면 :

/QUILLIVANT[^Q]*(?:Q(?!UILLIVANT)[^Q]*)*/i 

[^Q]*(?:Q(?!UILLIVANT)[^Q]*)* 부분은 어떤 0+ Q들과 일치하고 Q의 0 이상의 시퀀스가 ​​UILLIVANT 0으로 따르지 another regex demo

보기 + Q 이외의 문자. 기본적으로이 부분은 Quillivant까지의 텍스트 또는 문자열의 끝과 일치합니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 몇 가지 간단한 테스트를 수행하고이 모든 사용 사례를 처리하는 것처럼 보입니다. 이것은 내 목표를 달성하기 위해 PHP 도살의 무리를 저축하지 않습니다. –