찾다

 >  Q&A  >  본문

정규식 - vim에서 정규식 찾기

원문은 다음과 같이 단순화되었습니다(여러 테이블 생성 문, 일부 테이블에는 동일한 필드가 있음).

으아악

테이블에 field2 필드가 있는 테이블 생성 문을 선택해야 합니다. 즉, 다음 텍스트를 선택하세요

으아악

규칙적인 규칙CREATE_.{-}F_class_type_.{-}ENGINE을 생각했는데, 분명히 뭔가 문제가 있는 것 같습니다.

선택한 텍스트에 CREATE 하나만 있도록 제한을 추가하여 선택한 텍스트가 올바르도록 하는 방법입니다. 감사해요.


직접 확인해 보세요. 부정적인 시선을 사용하세요.

天蓬老师天蓬老师2757일 전564

모든 응답(3)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-05-16 16:42:06

    일반 규칙을 다시 확인한 결과 부정적인 탐색을 사용하면 이 문제를 해결할 수 있다는 것을 알았습니다.
    먼저 올바른 정규 표현식을 붙여넣으세요: vCREATE(_.(CREATE)@!){-}field2_.{-}ENGINE.*vCREATE(_.(CREATE)@!){-}field2_.{-}ENGINE.*

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

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

    설명하면 나중에 확인하는 것도 편리합니다.🎜v: 모든 메타 문자에는 백슬래시가 필요하지 않습니다.🎜_.: 줄바꿈을 포함한 모든 문자🎜( CREATE)@!: 순차적 부정 탐색🎜(_.(CREATE)@!){-}: 모든 문자에 대한 욕심 없는 일치, 일치된 결과에는 다음이 포함되지 않습니다. 생성문자열🎜 🎜부정 탐색을 사용하면 일치하는 결과에 하나의 CREATE 문자열만 포함되도록 할 수 있습니다. 즉, 일치하는 결과에 여러 개의 테이블 생성 문이 포함되지 않습니다🎜

    회신하다
    0
  • 漂亮男人

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

    또 다른 아이디어: 应该也可以

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

    회신하다
    0
  • 世界只因有你

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

    무심코 하나 써서 숭고하게 시험에 합격했어요. 참고:

    CREATE TABLE .*s.*`field2`[sS]*?ENGINE=InnoDB

    회신하다
    0
  • 취소회신하다