Aşağıdaki kodu çalıştırdığımda; Her seferinde seg hatası alıyorum! Bu bilinen bir hata mı? Bu kodu nasıl çalıştırabilirim?preg_replace bölüm hatası atar
[[email protected] 2.0]# php test.php
Segmentation fault (core dumped)
Aşağıdaki kodu çalıştırdığımda; Her seferinde seg hatası alıyorum! Bu bilinen bir hata mı? Bu kodu nasıl çalıştırabilirim?preg_replace bölüm hatası atar
[[email protected] 2.0]# php test.php
Segmentation fault (core dumped)
PCRE'nin geri izlemesini zorlayan gereksiz yakalama gruplarınız var. Bu deneyin:
$replace = array(
"/<script.*?><\/\s?script>/s",
"/<style.*?><\/\s?style>/s",
"/<!--.*?-->/s",
"/\r\n/s"
);
\S
(non-boşluk) ile kombine Başka bir şey, \s
(boşluk) bir şey eşleşir. Yani sadece .
modelini kullanın.
Tamam:
<?php
$doc = file_get_contents("http://prairieprogressive.com/");
$replace = array(
"/<script([\s\S])*?<\/ ?script>/",
"/<style([\s\S])*?<\/ ?style>/",
"/<!--([\s\S])*?-->/",
"/\r\n/"
);
$doc = preg_replace($replace,"",$doc);
echo $doc;
?>
hatası (besbelli) gibi görünüyor!() Operatörleri ile bazı sorun var gibi yerine
$doc = preg_replace("/<style([\s\S])*<\/ ?style>/",'',$doc);
çalıştığını
ait
$doc = preg_replace("/<style([\s\S]*)<\/ ?style>/",'',$doc);
kullandığınızda O
... görünüyor !!
unicode için bu (katma seçeneği u deneyin ve) [\ s \ S] (değiştirildi:?.?.
<?php
$doc = file_get_contents("http://prairieprogressive.com/");
$replace = array(
"#<script.*?</ ?script>#u",
'#<style.*?</ ?style>#u',
"#<!--.*?-->#u",
"#\r\n#u"
);
$doc = preg_replace($replace,"",$doc);
echo $doc;
?>
Bu bir hata gibi görünüyor
tarafından belirtildiği gibi
$doc = preg_replace("/<style.*?<\/ ?style>/s",'',$doc);
PHP'nin hangi sürümü Çünkü bunu yaptığımda iyi çalışıyor. –
@Viper: 'PHP 5.3.2' – codaddict
.
bile yeni satırı eşleşmesi için bir çözüm olarak,
s
değiştirici kullanabileceğiniz bu neden olan stil regex olduğunu
[\s\S]
'un anlamı nedir? Herhangi bir boşluk karakteri ve herhangi bir boşluk olmayan karakterle eşleşir. .*
ile değiştirirseniz, iyi çalışır.
DÜZENLEME: Yeni satırları da eşleştirmek istiyorsanız, s
değiştiricisini kullanın. Benim düşünceme göre, çelişkili bir [\s\S]
'dan daha anlaşılması daha kolaydır.
Hiç [uygun HTML çözümleyici] kullanmayı düşündünüz mü (http://stackoverflow.com/questions/3650125/how-to-parse-html-with-php-closed)? – Gumbo
Sadece bir not olarak, senaryo ve stil etiketlerinden sonra '>' eksik olduğunu düşünüyorum. – GWW
Bize gerçek hatayı göster. Bir segfault alıyorsanız, PHP kurulumunuzla ilgili bir sorun olabilir. Ya da bir böcek. Her iki şekilde de, Gumbo'nun tavsiyelerini takip edin ve bir HTML ayrıştırıcı kullanın. – Cfreak