从字符串中获取子字符串的正则表达式

yzwgh 2008-12-06 05:18:49

现有字符串<p:foreach items="111" var="222">333</p:foreach>,如何用preg_match_all获取111,222,333处的字符串?
...全文
226 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
an9ryfr09 2008-12-06
我这个正则表达式比较长,因为考虑的比较严谨。例如items=的等号之间是否有空格,例如items="你使用的是单引号或是双引号。都可以匹配。如果你的html源代码不是很规则,建议采用我的。
回复
an9ryfr09 2008-12-06
$str = '<p:foreach items="111" var="222">333 </p:foreach>'; 
preg_match_all('/<p:foreach items\s*=\s*[\"\']??([^\"\']+)\s*[\"\']??\s*var\s*=\s*[\"\']??([^\"\']+)\s*[\"\']??>([^<]+)<\/p:foreach>/is',$str,$matchs);

echo "match all:",htmlspecialchars($matchs[0][0]),"<br/>";

$cnt = count($matchs);

for($i=1;$i<$cnt;$i++){
echo "match $i:",$matchs[$i][0],"<br/>";
}



注意,match all为整个匹配项,因为匹配下来在一个标签内,所以要使用htmlspecialchars函数才能看到源代码,否则只能看到一个333
回复
yzwgh 2008-12-06
谢谢[昨日如梦],111,222,333只是占位符,它们代表在它们所在位置的任意长度字符串,并不是指数字
回复
penglewen 2008-12-06
$str = '<p:foreach items="111" var="222">333 </p:foreach>';
preg_match_all('/\d+/',$str,$out);
print_r($out);
回复
yzwgh 2008-12-06
没有人回答?
回复
yzwgh 2008-12-06
当然,还包括获取该字符串本身
回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2008-12-06 05:18
社区公告
暂无公告