Expression régulière - trouver une expression régulière dans vim
天蓬老师
天蓬老师 2017-05-16 16:40:06
0
3
580

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.

天蓬老师
天蓬老师

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

répondre à tous(3)
左手右手慢动作

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

Expliquez-le, il vous sera également pratique de vérifier plus tard🎜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ÉERChaî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🎜
漂亮男人

Autre idée : utilisez 应该也可以

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

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal