metakarakterleriyle iki değişken preg_match'in

2 Cevap regex

Ben her iki dosya yolları iki dize değişkenleri var. Çalıştı kod önerilmiyor Ereg kullanılır, bu yüzden preg_match kullanarak yeniden yazmak çalışıyorum:

Eski kod, çalıştı:

$path1 = quotemeta($path);
ereg("$path1(.*)$", $path2, $matches);

Iş görünmüyor preg_match kullanarak:

$path1 = quotemeta($path);
preg_match("/$path1(.*)$/", $path2, $matches);

Bu verir

preg_match (): Bilinmeyen değiştirici 'V' hata.

Ayrıca, elde etmek için çalışıyorum ana şey ilk yakalanan parantez dizilimi eşleşen metin [1], $ olan maçlar olduğunu, bu yüzden ben gerçekten kullanamıyorum düşünüyorum substr().

2 Cevap

Bazı özel karakterler $path değişkene varsa, o kaçtı olmalı - ve onlar kullanılarak PCRE dikkate alındığında kaçtı olmalıdır; olup POSIX-regex.


This can be done using the preg_quote function ; which means your code would look like this :

$path1 = preg_quote($path, '/');
preg_match("/$path1(.*)$/", $path2, $matches);

Özellikle, PCRE regex etrafında bir sınırlayıcı kullanmak unutmayın - burada, bir / kullanılır; Bu işlev varsayılan olarak, / karakteri, kaçış yok gibi bu sınırlayıcı, preg_quote geçirilecek vardır.


The quotemeta function you were using doesn't quote all the characters that are used by PCRE.

Eğer PCRE'nin POSIX regex bazı kod taşıma olduğundan, PCRE Patterns section of the manual bir göz atmalısınız: PCRE'nin çok güçlü, ama bu güç hileci bir çift ile birlikte geliyor ...

Düzenli ifadeler olmadan bunu çözebilir:

$pos = strpos($path2, $path);
if ($pos !== false) {
    $match = substr($path2, $pos+strlen($path));
}