php
  • regex
  • preg-match
  • 2015-09-03 5 views -2 likes 
    -2

    Я хочу поставить французские слова в массив.PHP Preg match в файле html. Regex

    <?php 
    
    $contents = file_get_contents("http://quizlet.com/9117/envol-7-unite-1-presentation-flash-cards/"); 
    
    $pattern = '/<span class="TermText qWord lang-fr">(.*?)</s'; 
    
    preg_match($pattern,$contents, $matches); 
    
    print_r($matches); 
    
    ?> 
    

    Результатом этого кода является пустой массив.

    +0

    1) http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags 2) Эта строка не отображается на указанном вами URL-адресе. (Строка в источнике использует инкапсуляцию одиночной кавычки для определения класса, для справки). –

    +0

    @JonStirling, для вашего комментария # 2, строка существует в строке 895 – CodeGodie

    +0

    @CodeGodie Нет, это не так. Посмотрите внимательнее. –

    ответ

    -2

    Исходная страница содержит значения классов в одинарных кавычках. Также вам нужно использовать функцию preg_match_all(), чтобы получить все результаты.

    <?php 
    
    $contents = file_get_contents("http://quizlet.com/9117/envol-7-unite-1-presentation-flash-cards/"); 
    
    $pattern = "/<span class='TermText qWord lang-fr'>(.*?)\</s"; 
    
    preg_match_all($pattern,$contents, $matches); 
    
    print_r($matches); 
    
    ?> 
    
    0

    Если вы хотите, чтобы все внутренние тексты <span> тегов, имеющих lang-fr в их значении class атрибута, вы можете использовать следующее решение на основе DOMDocument/DOMXPath:

    $contents = file_get_contents("http://quizlet.com/9117/envol-7-unite-1-presentation-flash-cards/"); 
    $dom = new DOMDocument; 
    @$dom->loadHTML($contents, LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD); 
    $xp = new DOMXPath($dom); 
    $spans = $xp->query('//span[contains(@class,"lang-fr")]'); 
    $arr = array(); 
    foreach ($spans as $span) { 
    array_push($arr, $span->nodeValue); 
    } 
    print_r($arr); 
    

    См IDEONE demo

    Здесь xpath - '//span[contains(@class,"lang-fr")]'. Вы можете сделать его более строгим, чтобы получить только теги span с атрибутом класса, равным «TermText qWord lang-fr»: '//span[@class="lang-fr"]'.

    Это решение избавляет вас от проблемы сопоставления значений атрибутов разделителя того или иного типа в HTML. И многие другие вопросы, связанные с регулярным анализом регулярных выражений.

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