Ungkapan biasa - cari ungkapan biasa dalam vim
天蓬老师
天蓬老师 2017-05-16 16:40:06
0
3
582

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.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

membalas semua(3)
左手右手慢动作

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🎜
漂亮男人

Idea lain: gunakan 应该也可以

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

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

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan