Di Jawa, saya mencoba mengembalikan semua kecocokan regex ke array tetapi tampaknya Anda hanya dapat memeriksa apakah polanya cocok dengan sesuatu atau tidak (boolean).
Bagaimana saya bisa menggunakan pencocokan regex untuk membentuk array dari semua string yang cocok dengan ekspresi regex dalam string yang diberikan?
Jawaban:
( Jawaban 4castle lebih baik daripada yang di bawah ini jika Anda dapat menganggap Java> = 9)
Anda perlu membuat korek api dan menggunakannya untuk menemukan korek api.
Setelah ini,
allMatches
berisi kecocokan, dan Anda dapat menggunakanallMatches.toArray(new String[0])
untuk mendapatkan array jika Anda benar-benar membutuhkannya.Anda juga dapat menggunakan
MatchResult
untuk menulis fungsi pembantu untuk mengulangi pertandingan karenaMatcher.toMatchResult()
mengembalikan snapshot dari status grup saat ini.Misalnya, Anda dapat menulis iterator malas untuk membiarkan Anda melakukannya
dengan melakukan sesuatu seperti ini:
Dengan ini,
hasil panen
sumber
ArrayList
danLinkedList
, hasilnya mungkin mengejutkan.allMatches
vsyourStringHere.length()
), Anda mungkin dapat melakukan prakiraan ukuran yang baik untukallMatches
. Dalam pengalaman saya, biayaLinkedList
memori dan efisiensi iterasi-bijaksana biasanya tidak sepadan jadiLinkedList
bukan postur default saya. Tetapi ketika mengoptimalkan hot-spot, itu pasti layak implementasi swapping daftar untuk melihat apakah Anda mendapatkan perbaikan.Matcher#results
untuk mendapatkanStream
yang dapat Anda gunakan untuk menghasilkan array (lihat jawaban saya ).Di Java 9, sekarang Anda dapat menggunakan
Matcher#results()
untuk mendapatkanStream<MatchResult>
yang dapat Anda gunakan untuk mendapatkan daftar / array yang cocok.sumber
Java membuat regex terlalu rumit dan tidak mengikuti gaya perl. Lihatlah MentaRegex untuk melihat bagaimana Anda bisa mencapainya dalam satu baris kode Java:
sumber
Berikut ini contoh sederhana:
(jika Anda memiliki lebih banyak grup penangkap, Anda dapat merujuk mereka dengan indeks mereka sebagai argumen dari metode grup. Jika Anda memerlukan sebuah array, maka gunakan
list.toArray()
)sumber
Pattern.matches()
adalah metode statis, Anda tidak boleh menyebutnya sebagaiPattern
contoh.Pattern.matches(regex, input)
hanyalah sebuah singkatan untukPattern.compile(regex).matcher(input).matches()
.Dari Jalur Resmi Regex Java :
Gunakan
find
dan masukkan hasilnyagroup
pada array / Daftar / apa pun Anda.sumber
sumber