1

文字列の否定に正規表現を使用する方法を誰か教えてもらえますか? public classで始まり、最後にそれ以外のすべての行を見つけたいany thing except first,secondです。

たとえば、私が期待している結果では、 どの体も私を助けてくれませんかpublic class base??public class myfirst:base

4

4 に答える 4

4

ネガティブな先読みを使用します。

public\s+class\s+(?!first|second).+
于 2010-07-07T16:24:50.417 に答える
3

Peter が正しく、Visual Studio のFind機能を使用している場合、これは機能するはずです。

^:b*public:b+class:b+~(first|second):i.*$

:bスペースまたはタブ
~(...)に一致する VS が否定先読みを行う方法は
:i、C/C++ 識別子に一致します

残りは標準の正規表現構文です:
^行頭
$行末 行末
.任意の文字
*0 個以上
+1 個以上
|交互

于 2010-07-08T12:12:27.543 に答える
1

他の2つの答えはどちらも近づいていますが、おそらくさまざまな理由で失敗します。

public\s+class\s+(?:(?!first|second).)+

ネガティブルックアヘッドの周りに(キャプチャされていない)グループがあり、それが最初の位置以外にも適用されるようにする方法に注意してください。

そして、そのグループは制限が少なくなります-.改行を除外するため、の代わりにそれを使用し、\S必要$ありません-これは指定された単語を除外し、他の単語と一致します。

スラッシュはすべてに必要なわけではなく、文字列ベースの正規表現の使用にしか遭遇したことがない人を混乱させる可能性があるため、式をラップするスラッシュはありません。

それでも失敗する場合は、誤って一致または欠落している正確なコンテンツと、使用している言語/IDEを投稿してください。

更新:いくつかの計り知れない理由により、
独自の特別な正規表現実装を備えたVisualStudioを使用していることが判明しました。したがって、代わりにこれを試してみることをお勧めします。

public:b+class:b+~(first|second)+$

私にはそれをテストする方法がありません-それが機能しない場合は、を削除してみて$ください。それ以外の場合は、VSユーザーを見つける必要があります。さらに良いことに、この愚かな非標準正規表現を担当するVSエンジニア。

于 2010-07-07T18:29:11.930 に答える
0

ここにあなたのために働くべきものがあります

/public\sclass\s(?:[^fs\s]+|(?!first|second)\S)+(?=\s|$)/

ヘッドの 2 番目の外観は、$(行末) または特定のユース ケースで機能する別のアンカー (「{」など) に変更できます。

編集:最後の部分を次のように変更してみてください:

(?=\s|$)
于 2010-07-07T16:48:21.610 に答える