正则表达式,匹配两个标签中所有的字符该怎么写?
preg_match("/\[LoopID=\"\w{1,10}\"\][.\s]*[^\[\]][.\s]*\[\/Loop\]/",$this->ReplaceHTM...
preg_match("/\[Loop ID=\"\w{1,10}\"\][.\s]*[^\[\]][.\s]*\[\/Loop\]/",$this->ReplaceHTML,$ArrLabel);
我是想匹配关于[Loop ID=""]和[/Loop]之间的所有字符,包括回车、换行之类的,但是不能包括中括号。我上面写的,运行不通啊,正确该怎么写? 展开
我是想匹配关于[Loop ID=""]和[/Loop]之间的所有字符,包括回车、换行之类的,但是不能包括中括号。我上面写的,运行不通啊,正确该怎么写? 展开
2个回答
推荐于2016-08-22 · 知道合伙人互联网行家
关注
展开全部
<?php
$str = '
[Loop ID="id-10"]
什么都行
换行也行
[/Loop]
';
//[\s\S]可匹配任意字符,包括换行。下面忽略ID值的,需要自己修改或追问
preg_match('#\[Loop[\s\S]*?\]([\s\S]*?)\[/Loop\]#i',$str,$m);
echo '<pre>';
var_dump($m);
//End_php
追问
/\[Loop\sID=\"\w{1,10}\"\][.\s]*[^\[\]]*[.\s]*\[\/Loop\]/
用笨方法憋了半天还是解决排除万难了。不过还是有个问题问你,你的代码中*号后面的问题代表的是什么意思?看到有这样写的,但不太理解。另外#号是定界符吧?这个定界符用什么符号都可以吗?后面跟的i是某种选项参数吗?
追答
<?php
ini_set('display_errors','on');
error_reporting(E_ALL);
$str = '
[Loop ID="id-10"]
什么都行
换行也行
[/Loop]
';
/* //注释这句即可显示加了 "[" 的$str,它会覆盖上面的$str;
$str = '
[Loop ID="id-10"]
什么都行
换行也行
[ 这个匹配值为空
[/Loop]
';
// */
// (?!\[Loop[\s\S]*?\][\s\S]*?(?:\[|\])[\s\S]*?\[/Loop\]) 排除[Loop..] [/Loop] 之间有“[”或者“]”的情况
//([\s\S]*?) 匹配[Loop..] [/Loop]之间的任意字符,包括换行,并且提取,$m[1]即可得到相应的值
// preg_match('#(?!\[Loop[\s\S]*?\][\s\S]*?(?:\[|\])[\s\S]*?\[/Loop\])\[Loop[\s\S]*?\]([\s\S]*?)\[/Loop\]#i',$str,$m);
//用直接排除[和]的其他字符也能满足你的需求
preg_match('#\[Loop[\s\S]*?\]([^\[\]]*?)\[/Loop\]#i',$str,$m);
echo '<pre>';
var_dump($m);
//正则介绍:
// *表示匹配0个或多个
// ?表示0个或1个,即要么有,要么没有
// # 分界符,在PHP里面,特殊字符“都”(需要你亲测,我一般用#,|,@)能当分界符,前后呼应即可。特别的,匹配HTML时因为可能存在/,因此用非/即不需要对/转义为"\/"
// i 模式修正符,表示忽略大小写,有好几个的,自己查资料,比如e,s等
//End_php
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询