字符串解析帮助

时间:2010-01-29 10:59:55

标签: php regex

我有一段以下格式的文字:

  text text text <age>23</age>. text text <hobbies>...</hobbies>

我希望能够

1)提取在字符串中找到的每个<age><hobbies>标记之间找到的文本。例如,我将有一个名为$ages的数组,它将包含在所有<age></age>标记之间找到的所有年龄,然后是另一个数组$hobbies,它将在{{1}之间包含文本在整个字符串中找到的标签。

2)能够替换用标记提取的标签,例如{age_444},例如上面的文字将成为

<hobbies></hobbies>

如何做到这一点?

3 个答案:

答案 0 :(得分:1)

//Extract the age
preg_match_all("#<age>(.*?)</age>#",$string,$match);
$ages=$match[1];
//Extract the hobby
preg_match_all("#<hobbies>(.*?)</hobbies>#",$string,$match);
$hobbies=$match[1];

//Replace the age
$agefn=create_function('$match','$query=mysql_query("select ageid...where age=".$match[1]); return "<age>{age_".mysql_fetch_object($query)->ageid."}</age>"');
$string=preg_replace_callback("#<age>(.*?)</age>#",$agefn,$string);

//Replace the hobby
$hobfn=create_function('$match','$query=mysql_query("select hobid...where hobby=".$match[1]); return "<hobbies>{hobbies_".mysql_fetch_object($query)->hobid."}</hobbies>"');
$string=preg_replace_callback("#<hobbies>(.*?)</hobbies>#",$hobfn,$string);

答案 1 :(得分:0)

如果您的源文档是一种格式良好的XML(或者至少可以很容易地将其引入此形状),则可以使用XSLT / XSL-FO来转换文档。

查找&lt;&gt;所包含的信息标签和重新排列/提取它们是主要功能之一。您可以单独使用XSLT / XSL-FO,也可以使用各种语言(Java,C,甚至Visual Basic)

您需要的是源文档和描述转换规则的文档。渲染机器或库函数将完成剩下的工作。

希望有所帮助。祝你好运

答案 2 :(得分:-1)

$string = '<age>23</age><hobbies>hobbietext</hobbies>';

$ageTemp = explode('<age>', $string );
foreach($ageTemp as $key=>$value)
{
    $age = explode('</age>', $value);
    if(isset($age[0])) $ages[] = $age[0];
}

$hobbiesTemp = explode('<hobbies>', $string );
foreach($hobbiesTemp as $key=>$value)
{
    $hobbie = explode('</hobbies>', $value);
    if(isset($hobbie[0])) $hobbies[] = $hobbie[0];
}

最终数组是$ hobbies和$ ages

之后你就像这样替换你的刺痛:

foreach($ages as $key=>$value)
{
     $string = str_replace('<age>'.$value.'</age>', '{age_'.$yourId.'}', $string);
}

foreach($hobbies as $key=>$value)
{
     $string = str_replace('<hobbies>'.$value.'</hobbies>', '{hobbie_'.$yourId.'}', $string);
}