2017-10-05 4 views
0

私は他の誰かの正規表現を見ています...私は、私は肯定的なlookbehindを扱っていますが、私はそれが一致するはずのものがわからない:(?<=[^])\t{2,}|(?<=[>])C#regexで[^]と一致するものは何ですか?

私は[stuff]試合の間で任意の文字、トンuは、およびFを知っています。そして、私は[^stuff]がそれらの中ででなく、と一致することを知っています。

しかし、[^]の意味は?私はそれが "長さゼロでないもの"、つまり "何か"を意味すると思います。しかし、単純な.式(改行をキャプチャするために)で拡張を使うのはなぜですか?

更新:パーWikterさんのコメント

は、[^]だけでは有効ではありません。どんな[^]試合

\t{2,}のための背後に見える - - その後見つけしかし、それはまだ私がこの事を行うことになっているかと思っ葉...

私には、直感的な読書は

(?<=[^]) ...です二つ以上のタブ

| - そのための一致がない場合は...

(?<=[>]) - ...のための後ろに見えます文字。

私の解釈はどこですか?

+0

ECMAScript以外の大部分の正規表現の味のような無効なパターンです。それは* 'Unterminated [] set' *例外をスローします。どの文字にもマッチさせるには、 '(?s:。)'( 'RegexOptions.Singleline'オプション付きの' .'パターン)を使います。 –

+0

@WiktorStribiżewありがとう、あなたが正しいです、私が与えた表現はコンパイルされません。ソース正規表現からさらにコンテキストを追加しました: '(?<= [^])\ t {2、} |(?<=[>)'。 – mac9416

+1

はい、「C#regexでは[^]は何にマッチしますか?それは無効なパターンなので何もマッチしません。それはまったく試されていなくても、解析段階で失敗します。そして '[^>]'は、 '>'以外の文字にマッチするネゲートされた文字クラスです。 –

答えて

3

[^]は無効なパターンであるため、何も一致しません。それはまったく試されていなくても、解析段階で失敗します。一方、[^>]は、>以外の任意の文字に一致する無効化された文字クラスです。

[^]は、ECMAScript以外の大部分の正規表現フレーバでは無効なパターンです。 .NETでUnterminated [] setの例外がスローされます。

任意の文字を一致させるには、(?s:.).パターン、RegexOptions.Singlelineオプション付き)を使用します。

(?<=[^])\t{2,}|(?<=[>])パターンは、任意の単一のcharが、])、タブ、{2,}に一致否定文字クラスで直ちに[^])\t{2,}|(?<=[>]パターンに先行する位置を、一致する単一の正の後読みを表します、|,(,?,<,=,[,。 [^から最後の]までのすべての文字は、最初に]^の後にリテラル]のシンボルとみなされるため、「無効」になります。

あなたはS後に、それは場所と一致するregex demo hereが表示されることがあります

enter image description here

基本的に、あなたは常にワード文字でない文字に注意して、それが安全でプレーする必要がある、あなたがかもしれませんすべての単語でない文字をエスケープします。

^ 
] 
\ 
- 

あなたは誤解を避けたい場合は、常にそれらをエスケープ:文字クラスインサイド

、「特別」のみ4文字があります。

あなたがあれば、それらをエスケープする必要はありませんのでご注意、あなたの上司/顧客の前に披露したい場合は...

  • -:それは文字クラスの終了/開始時に表示されている場合、 charクラスと有効範囲/短縮型文字クラスの間にあり、それが文字クラス減算コンストラクトの一部でない場合
  • ]:文字クラスの先頭に現れ、それが唯一の文字ではない場合文字クラス
  • ^ - 最初の文字でない場合正の文字クラス。

そして\必見は常にがエスケープされます。

+1

与えられたパターンで[^>]はどこにありますか? >を含むようになる単一の文字クラスについて話しているなら、そう言いなさい。 – BoltClock

+1

@BoltClock [コメント](https://stackoverflow.com/questions/46588130/what-does-match-in-c-sharp-regex/46588503#comment80129827_46588130)にあります。実際には、有効な単純否定文字クラスの例を提供したかっただけです。 –

+1

@WiktorStribiżewあなたは '[^]]ではなく[[]]を見ていると思います。 – mac9416

関連する問題