Saya perlu membuat "Ekspresi reguler" dan "Pengganti" untuk mengisi string apa pun yang lebih pendek dari 10 karakter dengan nol. Itu harus bekerja di regex101.com, rasa PHP. Ini semua yang saya butuhkan.

Example Input:

123
12345
1234567891

Expected output:

0000000123
0000012345
1234567891

Saya berharap itu sesederhana mencari ([0-9]{1,9}) dan menggantinya dengan 000000000$1 tetapi jelas string akan melebihi panjang 10 karakter. Jadi saya mencoba dengan sintaks baca ke depan tetapi tidak berhasil.

0
Peter 20 Mei 2020, 23:40

1 menjawab

Jawaban Terbaik

Seperti yang Anda sebutkan dalam komentar di bawah pertanyaan Anda, saya menyediakan metode .NET menggunakan katalog untuk memasukkan string di regex tanpa menggunakan penggantian bersyarat (lihat jawaban saya di sini).

Jawaban ini dapat disesuaikan dengan PCRE dengan menggunakan grup reset cabang (?|...).

Lihat regex yang digunakan di sini

Opsi gJsm dan substitusi ${x}$1

^((?|[1-9](?=.*1\t+(?<x>0+))|[1-9]\d(?=.*2\t+(?<x>0+))|[1-9]\d{2}(?=.*3\t+(?<x>0+))|[1-9]\d{3}(?=.*4\t+(?<x>0+))|[1-9]\d{4}(?=.*5\t+(?<x>0+))|[1-9]\d{5}(?=.*6\t+(?<x>0+))|[1-9]\d{6}(?=.*7\t+(?<x>0+))|[1-9]\d{7}(?=.*8\t+(?<x>0+))))\b

Hasil:

1
12
123
12345678
123456789

Menjadi...

000000001
000000012
000000123
012345678
123456789
0
ctwheels 20 Mei 2020, 22:34