我有一段以下格式的文字:
text text text <age>23</age>. text text <hobbies>...</hobbies>
我希望能够
1)提取在字符串中找到的每个<age>
和<hobbies>
标记之间找到的文本。例如,我将有一个名为$ages
的数组,它将包含在所有<age></age>
标记之间找到的所有年龄,然后是另一个数组$hobbies
,它将在{{1}之间包含文本在整个字符串中找到的标签。
2)能够替换用标记提取的标签,例如{age_444},例如上面的文字将成为
<hobbies></hobbies>
如何做到这一点?
答案 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);
}