PHP preg_replace hatası

3 Cevap php

Ben aşağıdaki kodu vardır:

protected function safePath($path) {
    	$path = (string) $path;

    	$path = preg_replace(
    		array(
    		'#[\n\r\t\0]*#im',
    		'#/(\.){1,}/#i',
    		'#(\.){2,}#i',
    		'#(\.){2,}#i',
    		'#\('.DIRECTORY_SEPARATOR.'){2,}#i'
    		),
    		array(
    		'',
    		'',
    		'',
    		'/'
    		),
    		$path
    		)
    	;
    	return rtrim($path,DIRECTORY_SEPARATOR);
    }

Ben bir yol ile işlevi yürütmek sonra, bu hatayı alıyorum:

Warning: preg_replace () [function.preg değiştirme]: Derleme başarısız oldu: eşsiz parantez ....../myfile.php on line 534

hat 534 ile burada işaretlenmiş bu nereden:

protected function safePath($path) {
    	$path = (string) $path;

    	$path = preg_replace(
    		array(
    		'#[\n\r\t\0]*#im',
    		'#/(\.){1,}/#i',
    		'#(\.){2,}#i',
    		'#(\.){2,}#i',
    		'#\('.DIRECTORY_SEPARATOR.'){2,}#i'
    		),
    		array(
    		'',
    		'',
    		'',
    		'/'
    		),   <---------------- THis is line 534
    		$path
    		)
    	;
    	return rtrim($path,DIRECTORY_SEPARATOR);
    }

Bu hatayı sabitleme ile herhangi bir yardım? Teşekkür ederim.

3 Cevap

Bu doğru çünkü burada bu bölümü bulunuyor:

    '#\('.DIRECTORY_SEPARATOR.'){2,}#i'

Ben bir linux sisteme tahmin ediyorum. Windows'ta, DIRECTORY_SEPARATOR bu hat üzerindeki ilk eğik çizgi ile eşleşen bir eğik çizgi vardır.

Linux üzerinde, DIRECTORY_SEPARATOR bir eğik olduğunu ve bu nedenle bu dize sonunda başında kaçan bir sol ayraç, ve hiçbir eşleşen dirseği vardır.

Sen sadece ya bir / veya \ ile bu hat üzerinde DIRECTORY_SEPARATOR değiştirerek OS iki türü hata üretebilir. Hemen sonuçlarını göreceksiniz.

son regex, sen kapanış biri parantez açma kaçtı ama yok ettik

'#\('.DIRECTORY_SEPARATOR.'){2,}#i'

belki de olmalı ...

'#\('.DIRECTORY_SEPARATOR.'\){2,}#i'
                           ^
                           |
                       missing slash

... Ya da belki çizgi hiç olmamalıdır. Her iki şekilde de, onun tutarsız.

Her iki parethesees kaçmış ise Mighty garip, ben sadece bu hatayı alabilirsiniz:

'#\('.DIRECTORY_SEPARATOR.'\){2,}#i'

Eğer DIRECTORY_SEPARATOR kaçan değil belki çünkü?

'#\(\\'.DIRECTORY_SEPARATOR.'\){2,}#i'