Ne bu PHP düzenli ifade ile yanlış?

3 Cevap php
$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);

Daha sonra sayısal basamak ardından bir virgül tarafından takip alfabetik karakteri ile bir noktalı virgül ardından bir veya daha fazla sayısal karakterler tarafından izlenen bir veya daha fazla boşluk karakterleri (sekme ve / veya boşluk) ardından bütün alfabetik karakteri değiştirmek için çalışıyorum ve noktalı virgül.

Ben bir örnek vereceğiz:

Başlangıç:

hello world      1007;

Bitiş:

hello world,1007;

3 Cevap

İki '|' başlangıcında ve sonunda muhtemelen yanlış - ve ileri eğik çizgi olmalı hem de.

Diğer tüm eğik çizgi geriye eğik çizgi olması (ve kaçan gerekir) gerekmektedir.

Ve PHP 4.04 beri $ n bir yakalama grubuna atıfta tercih edilen yoldur.

$output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output);

Eğer tek tırnak kullanırsanız size backslash'lar kaçmak gerekmez:

$output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output);

Bu ileri eğik çizgi tersbölüler olmalı? Eğer tek-tırnak için çift tırnak değiştirmediğiniz sürece de PHP için onları kaçmak gerekir.

Sen ileri normal ifadede ters eğik çizgi, değil bölü istiyorum. Başlangıç ​​ve bitiş borular are gerekli (veya regex için başka bir ayraç)

$x = "hello world      1007;";    
echo preg_replace('|(\D)(\s+)(\d+)(;)|','$1,$3',$x);
echo preg_replace('/(\D)(\s+)(\d+)(;)/','$1,$3',$x);
echo preg_replace('{(\D)(\s+)(\d+)(;)}','$1,$3',$x);