Çeşitli pozisyonlarda parçaları maç için düzenli ifade

2 Cevap php

Ben ikinci bir uygulama ile bağlamak için, düzenli ifadeler kullanarak, ama aynı veritabanını kullanarak (Symfony uygulaması) bir DSN ayrıştırmak çalışıyorum.

Ben şu anda sahip DSN:

mysql:dbname=my_db_name;host=localhost

bir regex:

/^(\w+):(dbname=(\w+))?;?(host=(\w+))?/

(preg_match() kullanılarak) dönüştürülmüştür. Bu Tamam maçları, ancak DSN elemanları böylece, etrafında açık çünkü benim test ortamında başarısız:

mysql:host=localhost;dbname=my_testdb_name

Ben sadece :-) evet, onları yuvarlak geçiş olabilir ama ben hem DSN gelen ev sahibi ve Dbname parça çıkarma, tek bir düzenli ifade ile mümkün olduğundan emin değilim, ve ben aynı anda bilgimi geliştirmek mümkün olmak istiyorum zaman ;-) Bunu yapabilirim bir yolu var mı?

2 Cevap

Ben dize bölmek istiyorum ';' sonra bölünmüş dize her parçası üzerinde, ben ilgilendi her bölümü için ayrı regexs kullanın.

bunu hiç bir şekilde yuvarlak muhtemelen biraz overkill, ve kontrol etmek için bir üçüncü veya dördüncü bir şey ilave edilirse çabuk kontrolden alacağı böylece regex maçları yapmaya çalışıyor.

Aslında sen GÜNCEL bölme olmadan dize kurtulmak mümkün olabilir.

EDIT:

Ahh sadece soruyu tekrar okuyun, bu dize uzun bir dize parçası gibi görünüyor.

böylece bu yapabilirdi

/^(\w+):((dbname|host)=(\w+))?;?((dbname|host)=(\w+))?/

: azaltılmış olabilir ki

    /^(\w+):((dbname|host)=(\w+));?+

Eğer regex sizin lezzet için ayarlamanız gerekebilir, ben sadece. net alışkınım

Aşağıdaki ifade iki DSN maç olabilir

/^(\w+):((dbname|host)=(\w+))?;?((dbname|host)=(\w+))?/

Host = localhost; host = localhost çok ...: Ama mysql maç olabilir