一个字符串截取的问题 $text=" <name >PPP </name >";echo strip_tags($text); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 " <name >PPP </name >"这样的样式 是指都是<name > 和</name > ?还是都是html标记?还是可以是xml自定义标记?name后面是不是一定有空格?PPP后面是不是一定有空格?.....说题目要说清楚,说不清楚,就算别人给了答案能解, 也不会是最优解 $str = "<name>PPP</name><name>bbb</name>";preg_match_all("/<name>(.*?)<\/name>/",$str,$arrStr);print_r($arrStr); 如果是html标记,那么一楼的就是正解。如果是自定义标记,一般都是用正则提取,但是你自定义的标记需要有一定的规律,就如楼上说的那样,最好明确给出。 以上给的方法正确,但最准确通用的方法还是逐个取字符,如果<name ><name >PPP </name ></name >嵌套的话正则就很难取准确。 我的意思是一个字符串,里面的字符串大多是这样 "<name >PPP </name > <version>2.0</version>"现在我想根据这样的特征,把PPP,2.0这样的提取出来.jom_ch 朋友的方法我试过了,好像不行. $str = "<name >PPP </name > <version >2.0 </version >"; preg_match("/<[^>.]*>(.*)<\/[^>.]*>/",$str,$m); for($i=1;$i<=count($m);$i++){ echo $m[$i];} preg_match("/ <[^ >.]* >(.*) <\/[^ >.]* >/",$str,$m); 应该用[^<>]+ <name >PPP </name >==============================<> 里 name 的前后到底有没有空格,如果有,是多少个 $str = "<name >PPP </name > <version >2.0</version >"; preg_match("/<[^ >].+\s*>(.*\s*)<\/[^ >].+\s*>/i",$str,$m); print_r($m[0]);试试这个 我想通过关键词来截取然后放进不同的变量里比如先取得PPP然后再去2.0放进另一个变量,而不是把整个<>都去掉.即一个一个的截取. 难道楼主是这个意思?$str = "<name >PPP </name > <version >2.0 </version >"; preg_match_all("/<([^>]+)>([^<]*)<\/[^>]+>/",$str,$m,PREG_SET_ORDER); for($i=0;$i<count($m);$i++){ $tmp = trim($m[$i][1]); $$tmp = $m[$i][2];}echo "用变量输出:";echo $name;echo $version; 比如在ASP我可以之样截取我要的字符串strBegin="<Program_Name>"start=Newstring(wstr,strBegin)over=Newstring(wstr,"</Program_Name>")Program_Name=mid(wstr,start,over-start)Program_Name=right(Program_Name,len(Program_Name)-len(strBegin))我只想要类似上面的这样的方法. 给一段完整的字符串吧,php处理这种问题很简单,不知道为什么搞那么复杂,把你的意思表达清楚, 你要取得的文字的tagName是固定的还是随机的,是不是只要满足<tagName>text</tagName>这种形式的都把text取出来?取出来是不是 要存入$tagName这样的变量 我把我的意思讲清楚,字符串如何 <program_name>PPP</program_name> <os>win98</os> <version>2.0</version>能不能有一个方法让$str1=PPP$str2=win98$str3=2.0 <?php$str = '<program_name >PPP </program_name > <os >win98 </os > <version >2.0 </version > ';preg_match_all('/<([\s\S]*)>(?:.*?)<\/\\1>/i',$str,$m);print_r($m[0]);?> 楼上的,你能让$str1=PPP $str2=win98 $str3=2.0 我一个一个的取值,因为中间的<os >win98 </os >我可能不需要,所以我可能也只要$str1=PPP $str3=2.0 正则取出来所有值放在数组中,取舍就看你的操作了.<?php$str = '<program_name >PPP </program_name > <os >win98 </os > <version >2.0 </version > ';preg_match_all('/<([\s\S]*)>(?:.*?)<\/\\1>/i',$str,$m);foreach($m[0] as $k=>$v){ $s[trim($m[1][$k])] = $v;}print_r($s);?>当然像你那样用字符串函数处理也可以,strpos,substr.... 给你来个另类点的,<?php$str = '<program_name >PPP </program_name > <os >win98 </os > <version >2.0 </version > ';function myreplace($matches) { static $i = 0; if (trim($matches[1])) { $i++; global ${"str" . $i}; ${"str" . $i} = $matches[1]; }}preg_replace_callback('/>([^<>]+)</', 'myreplace', $str);echo $str1;echo $str2;echo $str3;?> $str = " <name >PPP </name > <name >bbb </name >"; preg_match_all("/ <name >(.*?) <\/name >/",$str,$arrStr); print_r($arrStr);正解 <([\s\S]*)>(?:.*?)<\/\\1>------------------(?:.*?)<\/\\1>什末意思? 湖水清澈(@fix my lover@)的方法不是挺好吗?还有什么不行的? 我想学php,有没有好的教程,,能让我快速学会开发简单网站的教程。(我以前是写软件的) 与大家分享今天工作中的一件趣事,一个warning引发的“血案” 问大家一个问题 求一正则表达式 静态页 获取IP位置的问题!! php similar_text函数用法 大家都说PHP是页面和代码不混杂的,我实在想不通应该怎么写,看看我这段代码,如果分开的话应该怎么实现? 简单传值问题!------在线等 mysql两张表的关联查询 php 怎么远程连接SQL2000?查询分析器可以正常远程连接 大家看一下,这网站做得怎么样?我觉得一般,网上最近炒得还挺厉害的。 在线等,正则问题:为什么匹配到了换行符
是指都是<name > 和</name > ?
还是都是html标记?
还是可以是xml自定义标记?
name后面是不是一定有空格?
PPP后面是不是一定有空格?
.....
说题目要说清楚,
说不清楚,
就算别人给了答案能解, 也不会是最优解
现在我想根据这样的特征,把PPP,2.0这样的提取出来.jom_ch 朋友的方法我试过了,好像不行.
preg_match("/<[^>.]*>(.*)<\/[^>.]*>/",$str,$m);
for($i=1;$i<=count($m);$i++){
echo $m[$i];
}
应该用[^<>]+
==============================<> 里 name 的前后到底有没有空格,如果有,是多少个
试试这个
比如先取得PPP
然后再去2.0放进另一个变量,而不是把整个<>都去掉.
即一个一个的截取.
preg_match_all("/<([^>]+)>([^<]*)<\/[^>]+>/",$str,$m,PREG_SET_ORDER);
for($i=0;$i<count($m);$i++){
$tmp = trim($m[$i][1]);
$$tmp = $m[$i][2];
}
echo "用变量输出:";
echo $name;
echo $version;
strBegin="<Program_Name>"
start=Newstring(wstr,strBegin)
over=Newstring(wstr,"</Program_Name>")
Program_Name=mid(wstr,start,over-start)
Program_Name=right(Program_Name,len(Program_Name)-len(strBegin))我只想要类似上面的这样的方法.
<program_name>PPP</program_name> <os>win98</os> <version>2.0</version>能不能有一个方法让
$str1=PPP
$str2=win98
$str3=2.0
<?php
$str = '<program_name >PPP </program_name > <os >win98 </os > <version >2.0 </version > ';
preg_match_all('/<([\s\S]*)>(?:.*?)<\/\\1>/i',$str,$m);
print_r($m[0]);
?>
$str1=PPP
$str2=win98
$str3=2.0
我一个一个的取值,因为中间的<os >win98 </os >我可能不需要,所以我可能也只要
$str1=PPP
$str3=2.0
$str = '<program_name >PPP </program_name > <os >win98 </os > <version >2.0 </version > ';
preg_match_all('/<([\s\S]*)>(?:.*?)<\/\\1>/i',$str,$m);
foreach($m[0] as $k=>$v)
{
$s[trim($m[1][$k])] = $v;
}
print_r($s);
?>
当然像你那样用字符串函数处理也可以,strpos,substr....
<?php
$str = '<program_name >PPP </program_name > <os >win98 </os > <version >2.0 </version > ';
function myreplace($matches) {
static $i = 0;
if (trim($matches[1])) {
$i++;
global ${"str" . $i};
${"str" . $i} = $matches[1];
}
}
preg_replace_callback('/>([^<>]+)</', 'myreplace', $str);
echo $str1;
echo $str2;
echo $str3;
?>
------------------
(?:.*?)<\/\\1>什末意思?