2015-11-03 57 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]; 

测试和工作...

这将赶上描述格式化的日期,在文本的某处。