2015-02-19 2 views
1

Я пытаюсь захватить все вхождения <col width="NUMBER">, используя preg_match_all. Я получил его, чтобы работать без символов новой строки, но не могу с ними. Я использовал модификатор/s в конце, но не пошел.Новые строки с preg_match_all

Обратите внимание, сначала я мог вернуться только первое вхождение, но я обнаружил, что я мог бы использовать одно утверждение, которое дал мне все вхождения, используя (?=<col width=[^>](.*)>)

// without newlines in text, it finds 88 and 573 
    $text = '<table><colgroup><col width="88"><col width="573"></colgroup>'; 

    preg_match_all('/<col width=[^>](.*)>(?=<col width=[^>](.*)>)/si', $text, $acell); 
    echo "<pre>"; 
    var_dump($acell); 
    echo "</pre>";  

// with newlines in text, can't find it. 
    $text = '<table> 
    <colgroup><col width="88"> 
    <col width="573"> 
    </colgroup>'; 

    preg_match_all('/<col width=[^>](.*)>(?=<col width=[^>](.*)>)/si', $text, $acell);  
    echo "<pre>"; 
    var_dump($acell); 
    echo "</pre>";  
+0

Есть newlines после '>', а не внутри. И утверждение просто работает случайно. – mario

ответ

0

Это гораздо проще:

preg_match_all('/<col width=[^>]+>/i', $text, $acell); 
+0

Он не работает с вышеуказанным текстом, который имеет символы новой строки. Ничего не сравнится - даже первое появление. – mseifert

+0

Уверен: http://sandbox.onlinephpfunctions.com/code/cf202dc36f39236ddd71fe57ff9af0db320fd50e – AbraCadaver

+0

Очень странно - я вижу, что он работает в песочнице, но он по-прежнему ничего не дает на моей локальной машине - вырезает и вставляет в новый php-файл. – mseifert

Смежные вопросы