私は以下のパターンがあります。ここでは正規表現の問題(のC#で)
private static Regex rgxDefinitionDoMatch = new Regex(@"d:(?<value>(?:(?!c:|d:|p:).)+)", RegexOptions.Compiled);
private static Regex rgxDefinitionDontMatch = new Regex(@"\!d:(?<value>(?:(?!c:|d:|p:).)+)", RegexOptions.Compiled);
private static Regex rgxDefinitionExactDoMatch = new Regex(@"d:(?<value>\""(?:(?!c:|d:|p:).)+)\""", RegexOptions.Compiled);
private static Regex rgxDefinitionExactDontMatch = new Regex(@"\!d:(?<value>\""(?:(?!c:|d:|p:).)+)\""", RegexOptions.Compiled);
が一致する例の文字列です:今ここに
c:matchThis !c:dontMatchThis p:matchThis !p:dontMatchThis d:def !d:defDont d:"def" !d:"defDont"
は、いくつかの問題があります:
- 私はrgxDefinitionDontMatchを使用して、両方を取得します
!d:defDont
とd:"defDont"
- 私がrgxDefinitionDoMatchを使用するとさらに悪いです...
!d:defDont
,d:"defDont"
、!d:def
およびd:"def"
が得られます。数2の場合
、私は、例えばrgxDefinitionDoMatch ^(?!\!)
の前に感嘆符を無視するようにさまざまな組み合わせを試してみましたが、それは、ただ何も一致していません。私は何をすべきか分からない。
また、私は両方の問題1.と2.
のための引用符を無視する方法が必要になります誰が助けることはできますか?私はしばらくの間試してきました。
[^ \!] d :(?(?:(?! c:| d:| p:| \!)))+) - これは感嘆符を無視するためのトリックを行うようですが、値は、私がチェックしているテキストの冒頭にntoです。テキストの先頭にd:testがあると、一致しません。開始以外のどこかにのみ一致します。何か案は? – Matt