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.
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
字符串使用否定环视后就能保证匹配出的结果只有一个
Expliquez-le, il vous sera également pratique de vérifier plus tard🎜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 pasCRÉER
Chaîne🎜 🎜L'utilisation d'une recherche négative peut garantir que le résultat correspondant n'aura qu'une seule chaîneCREATE
, c'est-à-dire que le résultat correspondant n'aura pas plusieurs instructions de création de table🎜Autre idée : utilisez
宏
应该也可以:h {
99@a
中的99
可以通过%/field2//n
pour obtenirJ'en ai écrit un avec désinvolture et j'ai réussi le test en sublime. Pour référence :