Nasıl bir PHP düzenli ifade ile her şeyi aynı olabilir?

5 Cevap php

Nasıl bir PHP düzenli ifade ile her şeyi aynı olabilir? / [. \ R \ n] * /, ama çalışmıyor: denedim. Herhangi bir fikir? Teşekkürler.

Bu benim e-postaları ayrıştırmak için bir PHP sınıfı için yapılan bir yöntem için:

public function getHeader($headerName) { 
    preg_match('/[\r\n]' . $headerName . '[:][ ](.+)[\r\n][^ \t]/Uis', "\n" . ltrim($this->originalMessage), $matches); return preg_replace('/[\r\n]*/', '', $matches[1]); 
    }

5 Cevap

/.*/s (bakınız perl's docs). (Bu URL'den alıntı) s seçeneğini araçları:

Tek hat olarak dize davranın. (Olun. Satırbaşı maç)

Sana across birden fazla satır eşleştirmek istiyorum, \n ve \r Yukarıda sizin katılımına dayalı, varsayalım. Bu durumda, kullanım:

/.*/s

(Açık /s değiştirici, yani, değişim . herhangi bir karakteri eşleştirmek için, hatta bir yeni satır, normalde maç olmaz unutmayın.)

Bkz http://www.perl.com/doc/manual/html/pod/perlre.html

Neden her şeyi karşılayan istiyorsun? Her zaman doğrudur, çünkü bir koşulu olarak kullanmanın hiçbir anlamı yok. Eğer metin yakalamak istiyorsanız, sadece tüm dizeyi kullanın, çünkü bunu yapmak için bir regex gerekmez. Eğer kusur denetimi etrafında almak size ayıp daha sonra (sağ ve bunu yaparken hakkında ayrı bir soru sormak) çalışıyorsanız.

Burada XY Problem biraz var unutmayın. Aklınızda bazı görev X var, ve Y çözümün bir parçası olduğunu düşünüyorum. Sen Y hakkında sormak ama biz yapmaya çalışıyor bilmiyorum zaman gerçek soruyu cevaplamak zor bize X söylemek asla. :)

Ne /. * / S?

Bir karakter sınıfı ([]). Sadece dönem demektir.

/[\.\r\n]+/ ne isterseniz var mı?

Bu kludge de daha önce benim için çalıştı:

my $abstract_text = /Abstract:([\s\S]+?)\nReferences/m;

Eğer keyfi dahil metin veya birden yakalamalar arasındaki müdahale ile desen yakalamak istiyorsanız yararlıdır.