7

いくつかのコード ファイルを実行して、セミコロンで終わらない行を見つけようとしています。

私は現在これを持っています:^(?:(?!;).)*$グーグルの束から、それはうまくいきます。しかし、今はそれを拡張して、先頭のすべての空白、またはパッケージや開き括弧と閉じ括弧などの特定のキーワードを無視したいと考えています。

最終的な目標は、次のようなものを取ることです。

package example
{
    public class Example
    {
        var i = 0

        var j = 1;

        // other functions and stuff
    }
}

そして、私に見せるパターンにvar i = 0はセミコロンがありません。これは単なる例です。欠落しているセミコロンは、クラスのどこにでもある可能性があります。

何か案は?私は1時間以上いじっていますが、運がありません。

ありがとう。

4

6 に答える 6

1

これを試して:

^\s*(?!package|public|class|//|[{}]).*(?<!;\s*)$

PowerShellでテストした場合:

PS> (gc file.txt) -match '^\s*(?!package|public|class|//|[{}]).*(?<!;\s*)$'
        var i = 0 
PS> 
于 2012-06-10T13:33:12.720 に答える
1

セミコロンで終わらない行が必要な場合は、セミコロン.*ではない 1 文字が[^;]続き、場合によって\s*は行末までに空白が続く任意の量を要求できます$。だからあなたは持っています:

.*[^;]\s*$

先頭に空白を入れたくない場合は、行頭に^空白以外の任意の文字が[^\s]続き、その後に以前の正規表現が続くように要求する必要があります。

^[^\s].*[^;]\s*$

packageまたは、たとえば、、、または空白などのキーワードで開始したくない場合classは、これら 3 つのいずれでもない文字を要求できます。これら 3 つのいずれかに一致する正規表現は(?:\s|package|class)であり、それら以外のものに一致する正規表現は です(?!\s|package|class)。に注意してください!。だからあなたは今持っています:

^(?!\s|package|class).*[^;]\s*$
于 2012-06-10T00:13:20.403 に答える
1

この複雑な概念を正規表現で捉える鍵は、正規表現エンジン/インタープリターが次の概念をどのように処理するかを最初に理解することです。

  1. 前向きな先読み
  2. 否定先読み
  3. 肯定的な後読み
  4. 否定後読み

次に、必要なものをキャプチャする方法を理解し始めることができますが、それは、先にあるものと後ろにあるものが正確に指定したとおりである場合に限られます。

str.scan(/^\s*(?=\S)(?!package.+\n|public.+\n|\/\/|\{|\})(.+)(?<!;)\s*$/)
于 2012-06-10T00:51:50.793 に答える
0

空白で始まる可能性のある行を一致させようとして^\s*いますが、たとえば(?!package|class)、特定の単語のセットがなく、何か.*があり、セミコロン(またはその後に空白があるセミコロン)で終わっていない行を一致させようとしてい[^;]\s*ます。

^\s*(?!package|class).*?[^;]\s*$

正規表現のセクションを括弧で囲んでいることに注意してください。

于 2012-06-10T00:43:15.307 に答える
0

セミコロンで終わらない行だけの場合、これはより簡単です:

.*[^;]$

空白で始まりセミコロンで終わる行が必要ない場合:

^[^ ].*[^;]$
于 2012-06-10T00:10:24.393 に答える