Regex PHP özel bir dizesi sözdizimi ayrıştırma

3 Cevap php

Bu bir PHP-özel olandan genel regex soru daha.

Ben gibi görünebilir farklı dizeleri verilen duyuyorum:

A/B/PA ID U/C/D

Ve ben boşlukları kullanarak ("/ PA ID U") sahip orta bölü segment ayıklamak için çalışıyorum:

preg_match('/(\/PA .+)(\/.+|$)/', '', $matches);

Ancak, bunun yerine ben bekliyordum "/ PA ID U" alma, I "/ PA ID U / C / D" başlamıştı.

Onu nasıl uyan öncelik yapabilirsiniz "/. +" "$" Üzerinden bu son grupta?


Ek notlar:

Ben dize çok değişir çünkü geçen grup, başka bir "/ somethingsomthing" veya "" ya da maç için bu gerekir. Ben sadece "/. +" Için uyuyorsa, ben böyle "A / B / PA ID U" gibi satırın sonunda ise "/ PA kimliği U", almak mümkün olmayacaktır.

Temelde, bu yüzden gibi özel bölümleri ayıklamak gerekiyor:

Verilen: "A/B/PA ID U/PA ID U/C/D"

Özü: (A), (B), (PA ID U), (PA ID U), (C), (D)


[GÜNCELLEME]

Ben ayrı ayrı "PA kimliği U" desen maç var anlamına gelir çünkü) split () veya (patlayabilir kullanarak önlemek için çalışıyorum. Kenara sadece çizgi ayrılmış kesimleri ayıklanan, ben substringler özgü desenleri maç doğrulamak gerekir.

3 Cevap

Düzenli ifade .+ açgözlü ediliyor çünkü çalışmıyor. Sen olmayan açgözlü değiştirici ekleyerek bunu düzeltmek (bir ?) .+ gibi ilk için:

preg_match('/(\/PA .+?)(\/.+|$)/', '', $matches);

Sen alternatif yapabilirsiniz:

'/\/(PA [^\/]+)(\/.+|$)/'

(Ben seni bölü ilgilenmediğini tahmin) olduğunu yakalama önlemek için Pars dışında çizgi taşındı. [^\/]+ sonraki bölü herhangi bir karakter kadar yakalayacaktır.

Ben en etkili ne istediğinizi gerçekleştirmek için bölünmüş kullanabilirsiniz düşünüyorum.

split('/',$string);

Bkz: php manual

, necramirez

(\w+\s?)+

çalışması gerekir