php
  • regex
  • 2014-09-02 4 views 0 likes 
    0

    Я пытаюсь получить из строки Passed, <strong class="has_warnings">2 warning(s)</strong>. Помогите, пожалуйста, в noge в regex.Regex не соответствует шаблону с пробелами и новыми строками

    $str_html = ' 
    <td colspan="2" class="valid"> 
        Passed, <strong class="has_warnings">2 warning(s)</strong> 
    </td> ' 
    
    preg_match('#<td colspan="2" class="valid">(.*?)</td>#', $str_html, $data_html_errors); 
    

    Живое неформатированное регулярное выражение можно найти здесь.

    http://regexr.com/39e45

    ответ

    2

    Вам не нужно использовать какие-либо захватив группы.

    <td colspan="2" class="valid">\s*\K.*?(?=\s+<\/td) 
    

    DEMO

    +0

    группы захвата могут замедлить ваш процесс. –

    +0

    Да, это быстро, 10 секунд. – user3467855

    1

    Ваше регулярное выражение должно быть так:

    /<td colspan="2" class="valid">([\s\S]*)<\/td>/ 
    

    Вашего оригинальный Regex имеет несколько ошибок:

    • . не соответствуют табуляторам, разрывы строк, но ваша строка содержит их.
    • ? не требуется. Если вы хотите, содержание в td будет необязательным, то * уже означает 0 или более

    http://regexr.com/39e48

    Это RegEx, вероятно, более эффективным:

    /<td colspan="2" class="valid">(((?!<\/td>)[\s\S])+)<\/td>/ 
    

    http://regexr.com/39e4n

    +0

    Существует странная вещь происходит я подтягивания данных с помощью AJAX, и когда я добавил это регулярное выражение, он загружается в 30 секунд, это регулярное выражение, что производительность дорого? – user3467855

    +0

    @ user3467855 Если у вас действительно большой файл *, это * регулярное выражение очень дорогое. Насколько велик ваш файл? Я постараюсь предоставить вам лучшее подходящее регулярное выражение. – idmean

    +0

    Обычно это веб-страница, поэтому может быть между 10000 символов и 100000 символов. – user3467855

    1
    <td[^>]*?>(.*?)<\/td> 
    

    Попробуйте это.

    См. Демонстрационную версию.

    http://regex101.com/r/sA7pZ0/29

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