PHP preg_replace: Beni grok yardım (= :)

1 Cevap php

In another question, aşağıdaki satırlar vardır:

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_replace('/(^.+?)(?=:)/e', "strtolower('\\1')", $value);
// yields 'x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT'

İşte (?=:) bit kolon için bir arama gösterir, o kadar vardır. Ama ?= ile, belirli sözdizimi anlamıyorum. Orada tam olarak ne oluyor?

1 Cevap

Bu bir positive lookahead bulunuyor. Bu özellikle subexpression after bu noktaya oluşup görünüyor. Ama bu maçta değil consume bir şey yapar:

Pozitif ilerleme, sadece aynı çalışır. q(?=u) bir q bu maçın u rol yapmadan, bir u tarafından takip edilir eşleşir. Pozitif ilerleme yapı, bir soru işareti ve ardından açılış dirsek ile, yuvarlak parantez bir çift ve bir eşittir işareti. - RegularExpressions.info

Görebileceğiniz gibi yedek metnin içine çevreye dahil etmek gerekmez çünkü metni değiştirirken, etrafa özellikle yararlıdır. Örneğin, q bir u qu Yapabileceğiniz ile takip değil her yerine

replace 'q([^u])' by 'qu\1'

bu maçın bir parçası ve yeniden ekler daha sonra tekrar çünkü ancak bu aşağıdaki karakteri yakalar. Ayrıca etrafa kullanabilirsiniz:

replace 'q(?!u)' by 'qu'

sadece q eşleşti ve yerini, böylece değiştirme dizesi maçın parçası dahil olmak üzere artık gerekli değildir alır nerede.