2017-10-11 7 views
1

私は大薬処方箋の正規表現検索をしようとしています。特定の薬剤の名前と一致させ、薬剤名が再度繰り返されるか、EOFに達するまで、すべての文字を含める必要があります。文字列のすべてのインスタンスを取得し、その間にテキストを入れてください

私が一番近かったのはQUILLIVANT.+?(?=QUILLIVANT)のような肯定的な先読みを使用していますが、「QUILLIVANT」という単語が1つしかない場合はキャプチャしません。また、オンラインの正規表現テストでは、 "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

まず問題はQuillivant後にはQuillivantがない場合にも例を説明するために、先読みの終わりに|$を追加することによって解決することが可能です。

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

this regex demoを参照してください。

だけunroll the pattern、より堅牢なパターンを作るために:

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

[^Q]*(?:Q(?!UILLIVANT)[^Q]*)*の部分は任意の0+ Q Sにマッチし、次にQの任意の0以上の配列がUILLIVANTと0と続かないanother regex demo

を参照してください。 + Q以外の文字。基本的には、この部分はQuillivantまでの任意のテキストまたは文字列の終わりと一致します。

+0

迅速な対応をありがとうございます。私はいくつかの簡単なテストを行いました。そして、これはすべての私の使用事例を扱うように見えます。これは、私の目標を達成するためにたくさんのPHP屠殺をするのを助けてくれます。 –

関連する問題