PHP başlangıç ​​ile bir dize bölme ve değer durdurma

5 Cevap php

Ben regex ile aptal ama işe almak gibi olamaz. Ben denilen bir dosya benim belgenin html yapıştırmak için kod belli bir kısmını çekin böylece ben büyük bir dizeye dosya dönüştürme ediyorum includes / header.php var.

$ Str = file_get_contents ('includes / header.php');

Buradan ben <ul class="home"> ile başlar ve </ul> ile biter sadece dize döndürmek almak için çalışıyorum

Yapabildiğim kadar ben hala şaşkınım bir ifadeyi anlamaya çalışın.

Ben dize aşağı trim kez sadece benim sayfada ki yazdırabilirsiniz ama ben kırparak kısmını bilemiyorum

5 Cevap

Eğer gerçekten hardcore şey gerekiyorsa, http://www.php.net/manual/en/book.xmlreader.php.

Eğer sadece desen uyan metni söküp istiyorsanız böyle bir şey deneyin.

$string = "stuff<ul class=\"home\">alsdkjflaskdvlsakmdf<another></another></ul>stuff";

if( preg_match( '/<ul class="home">(.*)<\/ul>/', $string, $match ) ) { //do stuff with $match[0] }

Ben yaşıyorsanız zorluk bir sınırlayıcı olarak kullandığınız dize (ler) regex özel karakterler kaçan ile ilgisi var olduğunu varsayarak yaşıyorum. Eğer öyleyse, preg_quote() işlevini kullanmayı deneyin:

$start = preg_quote('<ul class="home">');

$end = preg_quote('</ul>', '/');

preg_match("/" . $start. '.*' . $end . "/", $str, $matching_html_snippets);

İstediğiniz html $matching_html_snippets[0] olmalıdır

Eğer ben PHP kılavuzu ima düşünüyorum dize bulgu, kullanabilirsiniz Regexes kullanarak değil gibi hissediyorum hızlıdır:

function substrstr($orig, $startText, $endText) {
	//get first occurrence of the start string
	$start = strpos($orig, $startText);
	//get last occurrence of the end string
	$end = strrpos($orig, $endText);
	if($start === FALSE || $end === FALSE)
		return $orig;
	$start++;
	$length = $end - $start;
	return substr($orig, $start, $length);
}

$substr = substrstr($string, '<ul class="home">', '</ul>');

Eğer çıkış sonlandırma dizeleri eklemek istiyorsanız bazı ayarlamalar yapmak gerekir, ama bu size başlamış!

İşte bunu yapmak için yeni bir yol bulunuyor; Ben bu verilen örneğin çalışır dışında bu tekniğin sağlamlığı veya performansı hakkında hiçbir garanti olun:

$prefix = '<ul class="home">';
$suffix = '</ul>';
$result = $prefix . array_shift(explode($suffix, array_pop(explode($prefix, $str)))) . $suffix;

You probably want an XML parser such as the built in one. Here is an example you might want to take a look at. http://www.php.net/manual/en/function.xml-parse.php#90733

Eğer çizgisinde sonra bir şey regex kullanmak istiyorsanız

$str = file_get_contents('includes/header.php');
$matchedstr = preg_match("<place your pattern here>", $str, $matches);

Muhtemelen desen istiyorum

'/<ul class="home">.*?<\/ul>/s'

$ Karşılaşmalar maçlar bir dizi içerecektir Nerede bu yüzden sizinle diziden ne istersen eleman yakala bulundu

$matchedstr[0];

İlk elemanı dönecektir hangi. Ve sonra çıktı o.

Ama biraz dikkatli olurdum, düzenli ifadeler şaşırtıcı kenar durumlarda maç için eğilimindedir ve onlar başarısız zaman için güvenilir sonuçlar elde etmek için, onlara gerçek verileri beslemek gerekir. Sadece şablonları geçiyoruz Ancak eğer ok olmalıdır, sadece bazı testler yapmak ve görmek tüm eserlerini eğer. Eğer değilse ben hala PHP XML Parser kullanmanızı tavsiye ediyorum.

Umut olur.