Ekspresi reguler untuk string yang tidak dimulai dengan urutan

197

Saya sedang memproses banyak tabel menggunakan program ini , tetapi saya perlu mengabaikan yang mulai dengan label "tbd_". Sejauh ini saya memiliki sesuatu seperti [^ tbd_] tetapi itu tidak cocok dengan karakter-karakter itu.

echoblaze
sumber
Bagaimana cara kerja SchemaSpy? Apakah Anda memberikan daftar nama tabel atau Anda memberinya regex dan melakukan pencocokan?
Mark Biek
Saya melewati regex (ini adalah -i flag) dan itu akan mengimpor pertandingan, atau begitulah katanya =)
echoblaze
4
@echoblaze: Jika Anda memproses XML, mengapa Anda tidak menggunakan parser XML? Itu akan jauh lebih mudah daripada menggunakan ekspresi reguler.
Gumbo

Jawaban:

333

Anda bisa menggunakan pernyataan pandangan ke depan yang negatif:

^(?!tbd_).+

Atau pernyataan pandangan balik yang negatif:

(^.{1,3}$|^.{4}(?<!tbd_).*)

Atau hanya set dan penggantian karakter lama:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*
Gumbo
sumber
6
Apakah ini terbatas pada mesin regex tertentu?
Mark Biek
1
Saya hanya bertanya karena yang kedua sepertinya masih cocok dengan tbd_ dalam pengujian saya. Yang pertama bagus.
Mark Biek
5
Lihatlah perbandingan rasa regular-expressions.info
Gumbo
1
@ Gumbo - haruskah itu tidak berakhir. * Bukan. +? Sebuah string yang tbd_ juga dimulai dengan itu ... karena itu menurut definisi tidak perlu diikuti oleh karakter lain? Kalau tidak, contoh yang bagus. Itu memang membutuhkan mesin regex yang mendukung lookaround.
BenAlabaster
1
@ Balabaster: Saya tidak berpikir dia mencari string kosong. Tetapi jika demikian, ia dapat dengan mudah mengubahnya dengan mengganti .+oleh.*
Gumbo