Saya menulis utilitas Java yang membantu saya menghasilkan banyak data untuk pengujian kinerja. Akan sangat keren untuk dapat menentukan regex untuk Strings sehingga generator saya mengeluarkan hal-hal yang cocok dengan ini. Apakah ada sesuatu di luar sana yang sudah dipanggang yang dapat saya gunakan untuk melakukan ini? Atau apakah ada perpustakaan yang membuat saya hampir sepanjang perjalanan ke sana?
Terima kasih
Jawaban:
Sunting: Seperti yang disebutkan di komentar, ada perpustakaan yang tersedia di Google Code untuk mencapai ini: https://code.google.com/archive/p/xeger/
Lihat juga https://github.com/mifmif/Generex seperti yang disarankan oleh Mifmif
Pesan asli:
Pertama, dengan regexp yang cukup kompleks, saya yakin ini tidak mungkin. Tapi Anda harus bisa menggabungkan sesuatu untuk ekspresi reguler.
Jika Anda melihat kode sumber kelas java.util.regex.Pattern, Anda akan melihat bahwa ia menggunakan representasi internal dari instance Node. Setiap komponen pola yang berbeda memiliki implementasi subkelas Node mereka sendiri. Node-node ini disusun menjadi sebuah pohon.
Dengan menghasilkan pengunjung yang melintasi pohon ini, Anda seharusnya dapat memanggil metode generator yang kelebihan beban atau semacam Builder yang merakit sesuatu bersama-sama.
sumber
[\w]
. Sebuah tampilan di baris terakhir wiki mereka memberi tahu kita hal itu.dk.brics.automaton
jadi bersiaplah untuk menambahkan dependensi pom pihak ketiga. Kebanyakan orang tidak keberatan tapi saya berharap ada sesuatu yang lebih kompak.Sudah terlambat untuk membantu pengepos asli, tapi bisa membantu pendatang baru. Generex adalah pustaka java berguna yang menyediakan banyak fitur untuk menggunakan regex untuk menghasilkan string (pembuatan acak, menghasilkan string berdasarkan indeksnya, menghasilkan semua string ...).
Contoh:
Penyingkapan
Proyek yang disebutkan di posting ini milik pengguna yang menjawab (Mifmif) pertanyaan itu. Sesuai aturan , ini perlu diangkat.
sumber
Xeger (Java) mampu melakukannya juga:
sumber
Saya telah melakukan root untuk meluncurkan perpustakaan saya sendiri untuk itu (Dalam c # tetapi harus mudah dipahami untuk pengembang Java).
Rxrdg dimulai sebagai solusi untuk masalah pembuatan data uji untuk proyek kehidupan nyata. Ide dasarnya adalah untuk memanfaatkan pola validasi (ekspresi reguler) yang ada untuk membuat data acak yang sesuai dengan pola tersebut. Dengan cara ini data acak yang valid dibuat.
Tidaklah sulit untuk menulis parser untuk pola regex sederhana. Menggunakan pohon sintaksis abstrak untuk menghasilkan string seharusnya lebih mudah.
sumber
Di podcast stackoverflow 11:
Ini mungkin bukan yang Anda cari, tetapi mungkin ini titik awal yang baik, daripada membuatnya sendiri.
Saya tidak dapat menemukan apa pun di Google, jadi saya sarankan untuk mengatasi masalah ini dengan mengurai ekspresi reguler yang diberikan ke dalam unit kerja terkecil (\ w, [xx], \ d, dll) dan menulis beberapa metode dasar untuk mendukung frasa ekspresi reguler tersebut.
Jadi untuk \ w Anda akan memiliki metode getRandomLetter () yang mengembalikan huruf acak apa pun, dan Anda juga akan memiliki getRandomLetter (char startLetter, char endLetter) yang memberi Anda huruf acak di antara dua nilai.
sumber
Pertanyaan ini sangat tua, meskipun masalahnya sebenarnya bagi saya. Saya sudah mencoba xeger dan Generex dan sepertinya tidak sesuai dengan ketentuan saya. Mereka sebenarnya gagal memproses beberapa pola regex (seperti
a{60000}
) atau untuk orang lain (misalnya(A|B|C|D|E|F)
) mereka tidak menghasilkan semua nilai yang mungkin. Karena saya tidak menemukan solusi lain yang sesuai - saya telah membuat perpustakaan saya sendiri.https://github.com/curious-odd-man/RgxGen
Ada juga artefak di pusat maven yang tersedia.
Contoh penggunaan:
sumber
Saya tahu sudah ada jawaban yang diterima, tetapi saya telah menggunakan RedGate's Data Generator (yang disebutkan dalam jawaban Craig) dan ini bekerja SANGAT baik untuk semua yang saya berikan. Ini cepat dan itu membuat saya ingin menggunakan regex yang sama untuk menghasilkan data nyata untuk hal-hal seperti kode registrasi yang dikeluarkan oleh benda ini.
Dibutuhkan regex seperti:
dan menghasilkan banyak kode unik seperti:
Apakah ini beberapa algoritme rahasia besar yang diketahui RedGate dan kita semua kurang beruntung atau apakah itu sesuatu yang sebenarnya bisa dilakukan oleh kita yang hanya manusia biasa?
sumber
Saya sedang dalam penerbangan dan baru melihat pertanyaan: Saya telah menulis solusi yang paling mudah tetapi tidak efisien dan tidak lengkap. Saya harap ini dapat membantu Anda untuk mulai menulis parser Anda sendiri:
sumber
Anda harus menulis parser Anda sendiri, seperti yang dilakukan oleh penulis String :: Random (Perl). Faktanya, dia tidak menggunakan regex di mana pun di modul itu, hanya itu yang digunakan oleh pembuat kode perl.
Di sisi lain, mungkin Anda bisa melihat sumbernya , untuk mendapatkan beberapa petunjuk.
EDIT: Sial, blair mengalahkanku dengan 15 detik.
sumber
Ini jauh dari mendukung regexp PCRE penuh, tetapi saya menulis metode Ruby berikut untuk mengambil string seperti regexp dan menghasilkan variasi di atasnya. (Untuk CAPTCHA berbasis bahasa.)
sumber
Pertanyaan ini sudah sangat lama, tetapi saya menemukannya dalam pencarian saya sendiri, jadi saya akan menyertakan beberapa tautan untuk orang lain yang mungkin mencari fungsi yang sama dalam bahasa lain.
sumber
Jika Anda ingin membuat string "kritis", Anda mungkin ingin mempertimbangkan:
EGRET http://elarson.pythonanywhere.com/ yang menghasilkan string "jahat" yang menutupi ekspresi reguler Anda
MUTREX http://cs.unibg.it/mutrex/ yang menghasilkan string pendeteksi kesalahan dengan mutasi regex
Keduanya adalah alat akademis (saya salah satu penulis yang terakhir) dan bekerja dengan cukup baik.
sumber