Neden aşağıdaki segfault yapar, ve bunu nasıl önleyebilirsiniz?
<?php
$str = ' <fieldset> <label for="go-to">Go to: </label> '
. str_repeat(' ', 10000)
. '<input type="submit" value="Go" /> </fieldset> </form>';
preg_match_all("@
</?(?![bisa]\b)(?!em\b)[^>]*> # starting tag, must not be one of several inline tags
(?:[^<]|</?(?:(?:[bisau]|em|strong|sup)\b)[^>]*>)* #allow text and some inline tags
[\?\!\.]+
@ix", $str, $matches);
?>
Ben .... bunun için yığın taşmasına bekleyin .... bir neden inanıyorum.
EDIT:
Yukarıdaki basitleştirilmiş versiyonu sorunu gösteren kalıptır. Daha tam bir versiyonu:
@
</?(?![bisa]\b)(?!em\b)[^>]*> # starting tag, must not be one of several inline tags
(?:[^<]|</?(?:(?:[bisau]|em|strong|sup)\b)[^>]*>)* # continue, allow text content and some inline tags
# normal sentence ending
[\?\!\.]+ # valid ending characters -- note elipses allowed
(?<!\b[ap]m\.)(?<!\b[ap]\.m\.)(?<!digg this\!)(?<!Stumble This\!) # disallow some false positives that we don't care about
\s*
(?:'|&\#0*34;|'|‘)?\s* # closing single quotes, in the unusual case like "he said: 'go away'".
(?:"|"|&\#0*34;|&\#x0*22;|”|&\#0*8221;|&\#x0*201D;|''|``|\xe2\x80\x9d|&\#0*148;|&\#x0*94;|\x94|\))?\s* # followed by any kind of close-quote char
(?=\<) # should be followed by a tag.
@ix
Amacı, geçerli bir İngilizce cümle biten benzediğini sona görünen html blokları bulmak. Ben bu yöntemi (bir makale vücut gibi) 'içerik' metin ve (gezinti öğeleri gibi yani) 'düzen' metin arasındaki farkı anlatma konusunda çok iyi olduğunu bulduk. Beyaz boşluk büyük bir miktarı etiketleri arasında varsa Bazen Ancak, darbeler.