0

注:正規表現を学んだばかりなので、くだらないパターンになる可能性があります

私はこの正規表現をハックしました

Begin VB\.Label\s+([^\s]+)\s+.+\s+Caption\s+=\s*("([^"]+)")\s+.+\s+Index\s+=\s*([0-9]+)

VB6 .frm ファイルでこれらのフォーム コントロールを一致させる

         Begin VB.Label lblError 
        AutoSize        =   -1  'True
        Caption         =   "Blah blah"
        Height          =   195
        Index           =   49
        Left            =   105
        TabIndex        =   31
        Top             =   3135
        Width           =   4455
     End

Regexpalでテストしたところ、うまくいきました 正規表現

しかし、matcher.find()完全にゴミの文字列しか見つかりません

Error [&About] - "&About"

これは私のエスケープされた Java マッチャーです

Pattern pat = Pattern.compile("Begin VB\\.Label\\s+([^\\s]+)\\s+.+\\s+Caption\\s+=\\s+(\"([^\"]+)\")\\s+.+\\s+Index\\s+=\\s+([0-9]+)");

編集:これは実際に一致するものです:

      Begin VB.Menu mnuHelp 
     Caption         =   "&About"
     Index           =   5
  End
4

2 に答える 2

2

私の推測では、正規表現の と関係があると思い.+ます。試す:

Begin VB\.Label lblError[0-9A-Za-z\-\'\s\=\"\&]+\sIndex\s+=\s+[0-9]+

私はそれをテストしましたが、うまくいきました。デモはこちら

于 2012-05-15T16:55:21.000 に答える
1

正規表現で別の方向に進むことをお勧めします。入力内の特定のラベルを解析して、そのラベル内から特定の値を取得しようとしています。

すべてを 1 つのマスター正規表現で実行しようとするのは魅力的ですが、そのような種類の正規表現は解析が難しく、非常に柔軟性に欠ける可能性があります。

これを 2 つの部分で行うことをお勧めします。

  1. ラベルの中身を引き出します。
  2. 単一のラベルから特定のプロパティを引き出します。

これは、次のような意味になります。

/* A pattern to grab the entire label -- Everything from Begin to End */
Pattern pEntireLabel = Pattern.compile("Begin VB\.Label.*?End", Pattern.MULTILINE);

/* Patterns for each specific value you want. */
Pattern pCaption = Pattern.compile("Caption\s*=\s*(\S*)");
/* . . . etc. for each value you want.  . . . */

Matcher mEntireLabel = pEntireLabel.matcher(...);
while (mEntireLabel.find()) {
  String label = mEntireLabel.group(0);

  /* Now find the specific parameters inside the label */
  Matcher mCaption = pCaption.matcher(label);
  if (mCaption.find()) {
       caption = mCaption.group(1);
  }

  /* Reapply this same logic for each property you want. */

}

ここでの利点は、これがより適応性が高いことです。新しいパラメーターを取得する必要がある場合は、簡単に追加できます。不要になった場合は、それを削除します。ラベル内の書式設定で値の一部が欠落している可能性がある場合、その 1 つのパラメーターは取得されませんが、正規表現全体が失敗するのではなく、残りのパラメーターが取得されます。などなど

于 2012-05-15T17:25:21.567 に答える