2009-03-11 11 views
0

私が取り組んでいるプロジェクトで次の正規表現を生成しましたが、うまくいきますが、プロの好奇心から私は「圧縮/短縮」することができます:ヘルプサブパターンを繰り返して正規表現を短くする

/[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/ 

正規表現は常に

+0

お探しのパターンは何ですか?例えば一致結果セットはどのように見えるのですか? –

+0

ええ、もし問題が "正確にこの正規表現と一致する"なら、それを圧縮するのは大変です。ジョンはよりエレガントなアプローチでかなり上手でした。マッチの内容のサンプルによっては、多くの助けになるでしょう。 – danieltalsky

答えて

3

手始めに、単一文字ブロックがちょうど離れて行くことができます...私にはブードゥー教のように思えてきた:

/\(PRD\).+;.+;.*;.+;.+;.*;.*;.*;/ 

次に、Y関連するアイテムをまとめてグループ化することができます。

/\(PRD\)(.+;){2}.*;(.+;){2}(.*;){3}/ 

これは実際には文字化けします。

+0

はい、長くても50%素晴らしいです。 ; P – Ash

+0

そして '。'毎回 '[^;]'にする必要があります。改訂されたオリジナルよりも15文字短いように、書き換えはずっと短くなります。 –

+0

オリジナルにはキャプチャが含まれていないため、 '(...)'シーケンスは '(?:...)'(非キャプチャグループ)でなければなりません。元はおそらくグループ化を望んでいるという別の議論がありますが、その後に分割する方が良いかどうかという疑問があります。 –

2
/\(PRD\).+;.+;.*;.+;.+;(.*;){3}/ 

私はあなたが多くを獲得し、同じ正確な規則に到着するとは思いません。あなたが ";"の間のすべてのテキストを作る気にしなかったならば、オプションで、あなたは可能性:

/\(PRD\)(.*;){8}/ 
3
/\(PRD\)(.+;.+;.*;){2}(.*;){2}/ 

は、より短い

/\(PRD\)((.+;){2}.*;){2}(.*;){2}/ 

しかし、おそらくそれほど驚くばかりです。どちらも文字列変更のためだけですが、

よりも短くなりました。

それともあなたもあなたが同じルールで取得することができ、最短かもしれ

/\(PRD\)(.+;.+;.*;){2}.*;.*;/ 

で行くことができます。

+0

同じルールで+1が最短 - 現在、ルールを少し曲げると... :) – eglasius

関連する問題