Temukan kelas dengan metode dengan nama yang sama

Saya mencoba mencari file dalam kode visual studio yang isinya memiliki kelas dengan metode dengan nama yang sama. Misalnya, konten berikut harus cocok:

class Hello {
    ...
    function Hello() { ... }
    ...
}

Bagaimanapun, saya mencoba membuat regex untuk class\s([A-Za-z_]+)[^]*(function\s\1) ini dan sepertinya berfungsi dengan baik. Saat saya mencoba mencari file dalam kode visual studio, muncul kesalahan yang mengatakan: "referensi terbalik tidak diperbolehkan".

Apakah ada cara mudah untuk melakukan apa yang saya inginkan di sini? Apakah regex saya terbentuk dengan buruk?


person Tomás Juárez    schedule 30.10.2018    source sumber
comment
Bentuknya buruk. Ganti [^] dengan [\s\S\r]. Apakah class\s([A-Za-z_]+)[\s\S\r]*(function\s\1) sesuai dengan kebutuhan Anda?   -  person Wiktor Stribiżew    schedule 30.10.2018
comment
Ya, saya mencoba dengan class\s([A-Za-z_]+)[\s\S\r]*(function\s\1) dan tidak berhasil di visual studio   -  person Tomás Juárez    schedule 30.10.2018
comment
Apakah itu Visual Studio atau VSCode? Saya baru saja mencoba class\s+([A-Za-z_]+)[\s\S\r]*(function\s\1\b) dan berfungsi dengan baik di Visual Studio S&R.   -  person Wiktor Stribiżew    schedule 30.10.2018
comment
Ini adalah kode visual studio, maaf   -  person Tomás Juárez    schedule 30.10.2018


Jawaban (1)


Anda harus mengganti [^] dengan [\s\S\r].

Pola yang seharusnya berhasil adalah

class\s([A-Za-z_]+)[\s\S\r]*(function\s\1)

Atau, mungkin versi yang lebih tepat:

class\s+([A-Za-z_]+)\b[\s\S\r]*?(function\s+\1\b)
       ^            ^^         ^              ^^

Detail

  • class - substring literal
  • \s+ - 1 spasi atau lebih
  • ([A-Za-z_]+) - Grup 1: 1 huruf atau lebih atau _
  • \b - batas kata
  • [\s\S\r]*? - 0 karakter atau lebih sesedikit mungkin
  • (function\s+\1\b) - Grup 2: fuinction, 1+ spasi, nilai Grup 1 dan batas kata.

masukkan deskripsi gambar di sini

person Wiktor Stribiżew    schedule 30.10.2018
comment
Sepertinya bagus. Bagaimanapun, apakah ini berhasil jika Anda mencoba mencari file dengan konten tersebut? Karena saya menggunakan regex dalam konteks pencarian file (saya tidak mencoba mencari di dalam file tertentu) dan regex tidak cocok dengan file apa pun. FYI, saya punya banyak file semacam itu, jadi setidaknya 350 harus cocok - person Tomás Juárez; 30.10.2018
comment
@TomásJuárez Mesin regex Find in Files menggunakan mesin regex Rust yang tidak mendukung referensi balik. Saya pikir Anda tidak dapat menggunakan regex Anda di Temukan di File. Perhatikan bahwa Anda dapat menggunakan fitur yang sama di Notepad++ (juga memiliki dialog Temukan di File). - person Wiktor Stribiżew; 30.10.2018
comment
Saya mencoba menggunakan VSCode dan Atom dan keduanya tidak berhasil. Satu-satunya editor teks yang dapat menemukan file untuk saya dengan cara itu adalah SublimeText 3. Jadi, regex Anda bekerja dengan sangat baik. Terima kasih banyak atas bantuan Anda! - person Tomás Juárez; 30.10.2018
comment
@ TomásJuárez Hebat, ya, Suiblime Text 3 didukung PCRE, ia akan bekerja dengan pencarian dan referensi balik. - person Wiktor Stribiżew; 30.10.2018