検索

ホームページ  >  に質問  >  本文

正規表現 - vim で正規表現を検索します。

元のテキストは次のように簡略化されています (複数のテーブル作成ステートメント、一部のテーブルには同じフィールドがあります):

リーリー

テーブル内に field2 フィールドがあるテーブル作成ステートメントを選択する必要があります。つまり、次のテキストを選択します

リーリー

規則的なルールCREATE_.{-}F_class_type_.{-}ENGINEを考えたのですが、これは明らかに何かが間違っています。

選択したテキストに CREATE が 1 つだけ含まれるように制限を追加して、選択したテキストが正しくなるようにする方法。ありがとう。


自分でチェックしてください。周りを否定的に見てください。

天蓬老师天蓬老师2755日前559

全員に返信(3)返信します

  • ringa_lee

    ringa_lee2017-05-16 16:42:06

    通常のルールを再度確認したところ、negative lookaround を使用するとこの問題を解決できることがわかりました。
    最初に正しい正規表現を投稿してください: vCREATE(_.(CREATE)@!){-}field2_.{-}ENGINE.*

    説明してください。後で確認するときにも便利です
    v: メタ文字にはバックスラッシュは必要ありませんv:任何元字符都不用加反斜杠
    _.:包括换行符的所有字符
    (CREATE)@!:顺序否定环视
    (_.(CREATE)@!){-}:非贪婪匹配任意字符,并且匹配出的结果中不含有CREATE_.: 改行を含むすべての文字

    >( CREATE)@!: 逐次否定検索

    (_.(CREATE)@!){-}: 任意の文字の非貪欲一致、および一致結果には次の文字列が含まれないCREATE文字列

    🎜ネガティブ ルックアラウンドを使用すると、一致結果に 🎜 文字列が 1 つだけ含まれるようになります。つまり、一致結果に複数のテーブル構築ステートメントが含まれないようになります🎜

    返事
    0
  • 漂亮男人

    漂亮男人2017-05-16 16:42:06

    別のアイデア:

    も使用できるはずです リーリー
    • 各作成ステートメントの行間に空白行があってはならず、先頭と末尾に空白行がなければならないという前提があります。:h {を参照してください。
    • 99@a 中的99 可以通过 %/field2//nゲット

    返事
    0
  • 世界只因有你

    世界只因有你2017-05-16 16:42:06

    何気なく書いたところ、見事にテストに合格しました。参考:

    CREATE TABLE .*s.*`field2`[sS]*?ENGINE=InnoDB

    返事
    0
  • キャンセル返事