cari

Rumah  >  Soal Jawab  >  teks badan

Ungkapan biasa - cari ungkapan biasa dalam vim

Teks asal dipermudahkan seperti berikut (beberapa pernyataan penciptaan jadual, sesetengah jadual mempunyai medan yang sama):

CREATE TABLE `test1` (
  `field1` int,
) ENGINE=InnoDB

CREATE TABLE `test2` (
  `field1` int,
) ENGINE=InnoDB

CREATE TABLE `test3` (
  `field2` int,
) ENGINE=InnoDB

CREATE TABLE `test4` (
  `field3` int,
) ENGINE=InnoDB

CREATE TABLE `test5` (
  `field2` int,
) ENGINE=InnoDB

Saya perlu memilih pernyataan penciptaan jadual yang mempunyai field2 medan dalam jadual, iaitu pilih teks berikut

CREATE TABLE `test3` (
  `field2` int,
) ENGINE=InnoDB

CREATE TABLE `test5` (
  `field2` int,
) ENGINE=InnoDB

Saya memikirkan peraturan biasaCREATE_.{-}F_class_type_.{-}ENGINE, tetapi jelas ada yang tidak kena dengan ini.

Bagaimana untuk menambah sekatan supaya hanya ada satu CREATE dalam teks yang dipilih, supaya teks yang dipilih adalah betul. terima kasih.


Semak sendiri, cuma gunakan pandangan negatif.

天蓬老师天蓬老师2755 hari yang lalu557

membalas semua(3)saya akan balas

  • ringa_lee

    ringa_lee2017-05-16 16:42:06

    Saya menyemak peraturan biasa sekali lagi dan mendapati bahawa menggunakan tinjauan negatif boleh menyelesaikan masalah ini.
    Tampalkan ungkapan biasa yang betul dahulu: vCREATE(_.(CREATE)@!){-}field2_.{-}ENGINE.*vCREATE(_.(CREATE)@!){-}field2_.{-}ENGINE.*

    解释一下,也方便以后自己查看
    v:任何元字符都不用加反斜杠
    _.:包括换行符的所有字符
    (CREATE)@!:顺序否定环视
    (_.(CREATE)@!){-}:非贪婪匹配任意字符,并且匹配出的结果中不含有CREATE字符串

    使用否定环视后就能保证匹配出的结果只有一个CREATE

    Terangkan, ia juga mudah untuk anda menyemak kemudian🎜v: Tiada garis miring ke belakang diperlukan untuk mana-mana aksara meta🎜_.: Semua aksara termasuk pemisah baris🎜( CREATE)@!: Sequential negative lookaround🎜(_.(CREATE)@!){-}: Tidak tamak padanan mana-mana aksara dan hasil yang dipadankan tidak mengandungi BUATString🎜 🎜Menggunakan tinjauan negatif boleh memastikan bahawa hasil padanan hanya akan mempunyai satu rentetan CREATE, iaitu, hasil padanan tidak akan mempunyai berbilang kenyataan penciptaan jadual🎜

    balas
    0
  • 漂亮男人

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

    Idea lain: gunakan 应该也可以

     :vim some.sql
     /field2
     qa{V}:w! >> wanted.sql
     nq
     99@a
    
    • 前提是每个创建语句行间不能有空行,首尾要有空行, 参见 :h {
    • 99@a 中的99 可以通过 %/field2//n untuk mendapatkan

    balas
    0
  • 世界只因有你

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

    Saya menulis satu secara santai dan lulus ujian dengan cemerlang. Untuk rujukan:

    BUAT JADUAL .*s.*`field2`[sS]*?ENGINE=InnoDB

    balas
    0
  • Batalbalas