Maison > Questions et réponses > le corps du texte
Le texte original est simplifié comme suit (plusieurs instructions de création de tables, certaines tables ont les mêmes champs) :
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
Je dois sélectionner les instructions de création de table qui ont field2
champs dans la table, c'est-à-dire sélectionner le texte suivant
CREATE TABLE `test3` (
`field2` int,
) ENGINE=InnoDB
CREATE TABLE `test5` (
`field2` int,
) ENGINE=InnoDB
J'ai pensé à une règle régulièreCREATE_.{-}F_class_type_.{-}ENGINE
, mais il y a évidemment quelque chose qui ne va pas avec cela.
Comment ajouter des restrictions pour qu'il n'y ait qu'un seul CREATE
dans le texte sélectionné, afin que le texte sélectionné soit correct. Merci.
Vérifiez-le vous-même, utilisez simplement un regard négatif autour de vous.
ringa_lee2017-05-16 16:42:06
J'ai vérifié à nouveau les règles habituelles et j'ai découvert que l'utilisation d'une recherche négative peut résoudre ce problème.
Collez d'abord l'expression régulière correcte : vCREATE(_.(CREATE)@!){-}field2_.{-}ENGINE.*
vCREATE(_.(CREATE)@!){-}field2_.{-}ENGINE.*
解释一下,也方便以后自己查看v
:任何元字符都不用加反斜杠_.
:包括换行符的所有字符(CREATE)@!
:顺序否定环视(_.(CREATE)@!){-}
:非贪婪匹配任意字符,并且匹配出的结果中不含有CREATE
字符串
使用否定环视后就能保证匹配出的结果只有一个CREATE
v
: Aucune barre oblique inverse n'est requise pour les métacaractères🎜_.
: Tous les caractères, y compris les sauts de ligne🎜( CREATE)@!
: recherche négative séquentielle🎜(_.(CREATE)@!){-}
: correspondance non gourmande d'un caractère et le résultat correspondant ne contient pas CRÉER
Chaîne🎜
🎜L'utilisation d'une recherche négative peut garantir que le résultat correspondant n'aura qu'une seule chaîne CREATE
, c'est-à-dire que le résultat correspondant n'aura pas plusieurs instructions de création de table🎜漂亮男人2017-05-16 16:42:06
Autre idée : utilisez 宏
应该也可以
:vim some.sql
/field2
qa{V}:w! >> wanted.sql
nq
99@a
:h {
99@a
中的99
可以通过 %/field2//n
pour obtenir世界只因有你2017-05-16 16:42:06
J'en ai écrit un avec désinvolture et j'ai réussi le test en sublime. Pour référence :
CRÉER UNE TABLE .*s.*`field2`[sS]*?ENGINE=InnoDB