php regex eşleştirme ilk ve son

4 Cevap php

Ben normal ifadeler için yeni ve php bir terim ilk ve son tekrarlarını maç istiyoruz. Bu hat, örneğin:

"Charlie, mary, bob, bob, mary, charlie, charlie, mary, bob, bob, mary, charlie"

i ortada iki, sadece ilk ve son "charlie" erişmek ister, ama olmaz. nasıl ben sadece bir dönem ilk ve son geçtikleri maç olur?

teşekkürler

4 Cevap

Eğer aradığınızı biliyorsanız substring (bir regex desen değil yani), ve sadece altdizgelerin pozisyonları arıyorsanız, sadece sadece bu kullanabilirsiniz:

strpos - Bir dizgenin ilkinin konumunu bulur

strrpos - Bir dizgede bir karakterin son olayının pozisyonunu bul

Bu normal ifade deneyin:

^(\w+),.*\1

Açgözlü * nicelik ilgilenir ki ilk kelime (\w+) ve bu kelimenin başka bir oluşumu arasındaki dize (\1, ilk gruplaşmanın maçı) mümkün olduğu kadar büyüktür.

Eğer düzenli ifadeye ^ ve $ sembolleri eklemek gerekir.

  • ^ - karşılaşmalar dizenin başlangıç
  • $ - dize sonu maçları

Sizin durumunuzda o olacak ^charlie İlk numuneyi maç ve charlie$ son örneği eşleşecek. Yoksa hem de maç isterseniz o olacak ^charlie|charlie$.

Start of String and End of String Anchors bu semboller hakkında daha fazla bilgi için ayrıca bkz.

Dize patlayan deneyin.

$names = "charlie, mary,bob,bob,mary, charlie, charlie, mary,bob,bob,mary,charlie";
$names_array = explode(",", $names);

Bu yaptıktan sonra, isimleri ile bir dizi var. Sen son istiyorum, bu yüzden 0 konumunda olacaktır.

$first = $names_array[0];

Bu son ile biraz yanıltıcıdır alır. Sen [) sayısı (] kaç tane isim bilmek zorunda ve dizi 0'dan saymaya başlar o günden bu yana, birini çıkartmak gerekecek.

$last = $names_array[count($names_array)-1];

Ben mümkün olan en iyi cevabı olmayabilir biliyorum, ne de en etkili, ama bu gerçekten küçük sorunları çözerek, programlama başlar nasıl olduğunu düşünüyorum.

İyi şanslar.