Pertanyaan Menemukan Elvis ?:


Saya telah ditugasi untuk menemukan Elvis (menggunakan pencarian gerhana). Apakah ada regex yang dapat saya gunakan untuk menemukannya?

The "Elvis Operator" (?:) adalah pemendekan operator ternary Java.

saya telah mencoba \?[\s\S]*[:] tetapi tidak cocok dengan multiline.
Apakah ada refactoring di mana saya bisa mengubah Elvis menjadi blok if-else?


5
2018-06-15 08:13


asal


Jawaban:


Edit Maaf, saya telah memasang regex untuk operator ternary, jika masalah Anda adalah multiline, Anda dapat menggunakan ini:

\?(\p{Z}|\r\n|\n)*:

4
2018-06-15 08:22



Anda harus mencocokkan garis pembatas secara eksplisit jika ingin mencocokkan beberapa baris. \ R akan cocok dengan salah satu dari mereka (platform-independen), dalam Eclipse 3.4 pula, atau Anda dapat menggunakan yang tepat untuk file Anda (\ r, \ n, \ r \ n). Misalnya. \?.*\R*.*: akan berfungsi jika hanya ada satu baris. Anda tidak dapat menggunakan \ R dalam kelas karakter, jadi jika Anda tidak tahu berapa banyak garis operator mungkin span, Anda harus membangun kelas karakter dengan pembatas garis Anda dan karakter yang mungkin muncul dalam operan. Sesuatu seperti ([-\r\n\w\s\[\](){}=!/%*+&^|."']*)\?([-\r\n\w\s\[\](){}=!/%*+&^|."']*):([-\r\n\w\s\[\](){}=!/%*+&^|."']*). Saya telah menyertakan tanda kurung untuk menangkap operand sebagai kelompok sehingga Anda dapat menemukan dan mengganti.

Anda punya masalah yang cukup besar, meskipun, jika ini adalah Java (dan mungkin bahasa lainnya). Terner bersyarat ?: operator menciptakan ekspresi, sementara pernyataan if bukanlah ekspresi. Mempertimbangkan:

boolean even = true;
int foo = even ? 2 : 3;
int bar = if (even) 2 else 3;

Baris ketiga secara sintaksis salah; dua konstruk kondisional tidak setara. (Apa yang sebenarnya Anda dapatkan dari baris kedua jika Anda menggunakan regex saya untuk menemukan dan mengganti adalah if (int foo = even) 2 else 3; yang memiliki masalah tambahan.)

Jadi, Anda dapat menemukan ?: operator dengan regex di atas (atau yang serupa; Saya mungkin telah melewatkan beberapa karakter yang perlu Anda sertakan di kelas), tetapi Anda tidak perlu mengganti mereka dengan pernyataan 'if'.


2
2018-06-15 09:33