php, dize kırmak için bir dize ikinci son virgül veya regex

5 Cevap php

Örneğin ben, ikinci son virgül bir dize kırmak için bir yol bulmaya çalışıyorum:

piece 1, piece 2, piece 3, piece 4, piece 5, piece 6, piece 7 2 parça olmalıdır:

piece 1, piece 2, piece 3, piece 4, piece 5 ve

piece 6, piece 7

ve

piece 1, piece 2, piece 3, piece 4, piece 5 olmalıdır:

piece 1, piece 2, piece 3 ve

piece 4, piece 5

Is there a string manipulation to search the string for a character veidentify the position of the second last instance of that character?

I thought about exploding the string by , then gluing the last 2 to make part 2, vegluing however many first ones (varies) to make part 1, but I think that might be overkill. Any string manipulations for this?

5 Cevap

Kenny tarafından belirtildiği gibi Regex burada bir overkill, kolayca strpos ve substr kullanabilirsiniz. Ama burada bir regex basesd çözümdür:

if(preg_match('{^(.*),(.*?),(.*?)$}',$input,$matches)) {
  $part1 = $matches[1];
  $part2 = $matches[2].','.$matches[3];
}

Ben düzenli ifadeler muhtemelen gerçekten gerekli olmadığını codaddict katılıyorum rağmen, heres daha:

İlk n-2 öğeleri için, dize'' ',[^,]+,[^,]+$' ile değiştirin

Son 2 öğeleri için için, dize '[^,]+,[^,]+$' arasında eşleşme bulmak

echo preg_replace('~,\s*(?=[^,]*,[^,]*$)~', ",\n", $str)

düzenli ifadeler özellikle bu gibi sorunlar için tasarlanmış bir araçtır, ve bunları kullanmak için değil tek bir neden yok. strpos () ve arkadaşları sadece çok aptal ve ayrıntılıdır ...

neden onun overkill array_splice() kullanarak düşünüyorsunuz?

$string="piece 1, piece 2, piece 3, piece 4, piece 5, piece 6, piece 7";
$s = explode(",",$string);
$t=array_slice($s, 0,-2);
$e=array_slice($s,-2);
print_r($t);
print_r($e);