2016-05-08 8 views
-2

リピート文字列の最初の出現をキャプチャする正規表現を作成しようとしています。TCL - リピート文字列の最初の一致を返す正規表現を作成します。

この文字列は、RSA証明書の「リスト」で、連続しています。私は最初のものだけに興味があります。私は、次のバリエーションを試してみたが、それはむしろ、最初の項目より完全なリストを返して

-----BEGIN CERTIFICATE----- 
CERT1.......... 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
CERT2............ 
-----END CERTIFICATE----- 
... 
... 
... 

set match [regexp {(-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----$).*} $certs matchAll firstCert] 
+0

重複で回答は「非欲張りマッチ」または「負の文字クラス」のいずれかです。この場合の後者の同等物は '{(----- BEGIN CERTIFICATE ----- [^ - ] * ----- END CERTIFICATE -----)}'です。 '[^ - ] *'式はダッシュではないものと一致します。 –

+0

@PeterLewerinその提案はあまりにも脆いようです。何らかの証明書に ' - '文字があった場合(おそらく許可されているかもしれません)、期待どおりに動作しません。 – Brandin

+0

@Brandin:はい。この場合、同等のものを表示したかっただけです。それが不適切な場合は、必ず使用しないでください。それが適切であれば実行可能な選択肢です。 –

答えて

0

あなたが使用する必要が

文字列は次のようになります非貪欲の.*?限定記号。

set match [regexp {(-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----)} \ 
    $certs matchAll firstCert] 

参照re_syntax manual page

関連する問題