2015-11-03 51 views
1

我正在閱讀RSS源並將其輸出到頁面上,並且我需要獲取<description>標記的子字符串並將其存儲爲變量(然後將其轉換爲其他時間格式,但我可以自己弄清楚)。這裏是我正在使用的數據樣本:使用PHP獲取字符串的一部分

<description>&lt;b&gt;When:&lt;/b&gt; Tuesday, November 03, 2015 - 6:00 PM - 8:00 PM&lt;br&gt;&lt;b&gt;Where:&lt;/b&gt; Adult Literacy Classroom (Lower Level) dedicated in honor of Eleanor Moore&lt;br&gt;&lt;br&gt;Clases de preparaci&#243;n para el GED &#150; grupos de estudio para ayudar con sus habilidades y preparaci&#243;n para obtener su diploma de equivalencia de escuela. Las clases se llevaran a cabo en espa&#241;ol, seg&#250;n la materia (escritura, literatura, estudios sociales, ciencias, matem&#225;ticas y la constituci&#243;n) &lt;br /&gt;&lt;br /&gt;GED preparation classes &#150; Study groups to help build your skills that will prepare you to get your high school equivalency diploma. Classes are taught in Spanish by subject area (writing, literature, social studies, science, math and the constitution)&lt;br /&gt;</description> 

我已經得到了描述標籤內的所有內容作爲varible,我只需要搶串Tuesday, November 03, 2015 - 6:00 PM - 8:00 PM,但我無法弄清楚如何要做到這一點。我有一種感覺PHP的explode可能會工作,但我與正則表達式很糟糕。我會繼續努力併發回我的進度,但任何幫助將不勝感激。

順便說一句,我用這個方法來獲取數據:http://bavotasan.com/2010/display-rss-feed-with-php/


感謝@ Bomberis123,我能夠做的正是我需要的。我的代碼可能會有點亂,但我想我會分享它的人誰需要做同樣的事情:

<?php 
$next_up_at_rss_feed = new DOMDocument(); 
$next_up_at_rss_feed->load("http://host7.evanced.info/waukegan/evanced/eventsxml.asp?ag=&et=&lib=0&nd=30&feedtitle=Waukegan+Public+Library%3CBR%3ECalendar+of+Programs+%26+Events&dm=rss2&LangType=0"); 
$next_up_at_posts = array(); 
foreach ($next_up_at_rss_feed->getElementsByTagName("item") as $node) { 
    $date = preg_match("/((\s)([^\<])+)/", $node->getElementsByTagName("description")->item(0)->nodeValue, $matches, PREG_OFFSET_CAPTURE, 3); 
    $date = $matches[0][0]; 
    $next_up_at_post = array (
     "title" => $node->getElementsByTagName("title")->item(0)->nodeValue, 
     "date" => $date, 
     "link" => $node->getElementsByTagName("guid")->item(0)->nodeValue, 
    ); 
    array_push($next_up_at_posts, $next_up_at_post); 
} 
$next_up_at_limit = 4; 
for ($next_up_at_counter = 0; $next_up_at_counter < $next_up_at_limit; $next_up_at_counter++) { 
    // get each value from the array; 
    $title = str_replace(" & ", " &amp; ", $next_up_at_posts[$next_up_at_counter]["title"]); 
    $link = $next_up_at_posts[$next_up_at_counter]["link"]; 
    $date_raw = $next_up_at_posts[$next_up_at_counter]["date"]; 

    // seperate out the date so it can be formatted 
    $date_array = explode(" - ", $date_raw); 

    // set up various formats for date 
    $date = $date_array[0]; 
    $date_time = strtotime($date); 
    $date_iso = date("Y-m-d", $date_time); 
    $date_pretty = date("F j", $date_time); 

    // set up various formats for start time 
    $start = $date_array[1]; 
    $start_time = strtotime($start); 
    $start_iso = date("H:i", $start_time); 
    $start_pretty = date("g:ia", $start_time); 

    // set up various formats for end time 
    $end = $date_array[2]; 
    $end_time = strtotime($end); 
    $end_iso = date("H:i", $end_time); 
    $end_pretty = date("g:ia", $end_time); 

    // display the data 
    echo "<article class='mini-article'><header class='mini-article-header'>"; 
    echo "<h6 class='mini-article-heading'><a href='{$link}' target='_blank'>{$title}</a></h6>"; 
    echo "<p class='mini-article-sub-heading'><a href='{$link}' target='_blank'><time datetime='{$date_iso}T{$start_iso}-06:00'>{$date_pretty}, {$start_pretty} - {$end_pretty}</time></a></p>"; 
    echo "</header></article>"; 
} 
?> 

回答

2

試試這個正則表達式,你可以使用PHP正則表達式,並使用第一組https://regex101.com/r/fI8nU9/1

$subject = "<description>&lt;b&gt;When:&lt;/b&gt; Tuesday, November 03, 2015 - 6:00 PM - 8:00 PM&lt;br&gt;&lt;b&gt;Where:&lt;/b&gt; Adult Literacy Classroom (Lower Level) dedicated in honor of Eleanor Moore&lt;br&gt;&lt;br&gt;Clases de preparaci&#243;n para el GED &#150; grupos de estudio para ayudar con sus habilidades y preparaci&#243;n para obtener su diploma de equivalencia de escuela. Las clases se llevaran a cabo en espa&#241;ol, seg&#250;n la materia (escritura, literatura, estudios sociales, ciencias, matem&#225;ticas y la constituci&#243;n) &lt;br /&gt;&lt;br /&gt;GED preparation classes &#150; Study groups to help build your skills that will prepare you to get your high school equivalency diploma. Classes are taught in Spanish by subject area (writing, literature, social studies, science, math and the constitution)&lt;br /&gt;</description>"; 
$pattern = '/((\s)([^&])+)/'; 
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3); 
echo $matches[0][0]; 
+0

請張貼代碼在這裏 – 2015-11-03 20:30:27

+0

謝謝了,這是完美的:) – JacobTheDev

+1

很高興我幫助,乾杯;)@Rev – Bomberis123

1

萬歲,我可以幫助和我的第一個StackOverflow答案!嘗試這樣的事情。它確實使用正則表達式,但只是一些簡單的語法片段,你可以選擇。

$data = "<description>&lt;b&gt;When:&lt;/b&gt; Tuesday, November 03, 2015 - 6:00 PM - 8:00 PM&lt;br&gt;&lt;b&gt;Where:&lt;/b&gt; Adult Literacy Classroom (Lower Level) dedicated in honor of Eleanor Moore&lt;br&gt;&lt;br&gt;Clases de preparaci&#243;n para el GED &#150; grupos de estudio para ayudar con sus habilidades y preparaci&#243;n para obtener su diploma de equivalencia de escuela. Las clases se llevaran a cabo en espa&#241;ol, seg&#250;n la materia (escritura, literatura, estudios sociales, ciencias, matem&#225;ticas y la constituci&#243;n) &lt;br /&gt;&lt;br /&gt;GED preparation classes &#150; Study groups to help build your skills that will prepare you to get your high school equivalency diploma. Classes are taught in Spanish by subject area (writing, literature, social studies, science, math and the constitution)&lt;br /&gt;</description>"; 
$regex = "~<description>&lt;b&gt;When:&lt;/b&gt; (.+?)&lt;br&gt;&lt;b&gt;Where:&lt;/b&gt;~"; 
preg_match($regex,$data,$match); 
echo $match[1]; 

我測試了這個,它的工作原理。

在這種情況下,您只需設置$regex與您期望的原始字符串看起來像,~在任何一端和(.+?)您要提取的部分是。

0

我很遠從正則表達式的專家,但是這可能是比較偏執的程序員的東西:

$s = '<description>&lt;b&gt;When:&lt;/b&gt; Tuesday, November 03, 2015 - 6:00 PM - 8:00 PM&lt;br&gt;&lt;b&gt;Where:&lt;/b&gt; Adult Literacy Classroom (Lower Level) dedicated in honor of Eleanor Moore&lt;br&gt;&lt;br&gt;Clases de preparaci&#243;n para el GED &#150; grupos de estudio para ayudar con sus habilidades y preparaci&#243;n para obtener su diploma de equivalencia de escuela. Las clases se llevaran a cabo en espa&#241;ol, seg&#250;n la materia (escritura, literatura, estudios sociales, ciencias, matem&#225;ticas y la constituci&#243;n) &lt;br /&gt;&lt;br /&gt;GED preparation classes &#150; Study groups to help build your skills that will prepare you to get your high school equivalency diploma. Classes are taught in Spanish by subject area (writing, literature, social studies, science, math and the constitution)&lt;br /&gt;</description>'; 
$a = array(); 
$p = '/(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday),\s' 
    .'(January|February|March|April|May|June|July|August|September|October|November|December)\s' 
    .'[0-3][0-9],\s[1-2][0-9]{3}\s-\s' // Year 
    .'[0-2]?[0-9]:[0-5][0-9]\s[AP]M\s-\s' // Time 
    .'[0-2]?[0-9]:[0-5][0-9]\s[AP]M/'; // Time 
preg_match($p, $s, $a, PREG_OFFSET_CAPTURE); 
echo $a[0][0]; 

測試和工作...

這將趕上描述格式化的日期,在文本的某處。