正则表达式,匹配两个标签中所有的字符该怎么写?

preg_match("/\[Loop ID=\"\w{1,10}\"\][.\s]*[^\[\]][.\s]*\[\/Loop\]/",$this->ReplaceHTML,$ArrLabel);

我是想匹配关于[Loop ID=""]和[/Loop]之间的所有字符,包括回车、换行之类的,但是不能包括中括号。我上面写的,运行不通啊,正确该怎么写?

<?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
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-17
\[Loop\sID=\"[\w\s]*?\"\](?<val>([\w\s]*?))\[\/Loop\]

求高人指点:正则表达式提取两个固定字符串之间的所有字符串?
re.search(r'(?<=\\[003\\]).+(?=产品描述)',s)

我想匹配所有字符,正则表达式怎么写
[\\s\\S]*[\\w\\W]*[\\d\\D]

匹配指定字符之后的所有字符串的正则表达式
想匹配" - 百度知道"的正则表达式:-.*$ 或者正则表达式:- 百度知道

如何用正则表达式匹配同时满足(在两个标点符号之间;满足某条件)的字符...
正则: \/^\\不[^,。;、,.?]*\\也$\/ 解释:^是以什么开头,$是以什么结尾,[^]是排除,排除是不是在一个句子内的情况,望采纳 测试结果:

正则表达式获取div标签里面的内容
第一、二个字符:]>\\s*(?:<[^>]+>\\s*)+(\\w+)\\s*(?:<[^>]+>\\s*)+(\\w+)依次类推。较麻烦,可以用 循环替换方法,将div标签中的 所有 <> 内容替换为空,剩余的字符就有所有的字符串。]+>.*(<[^>]+>)将捕获替换为空,需要多次查找替换,直到查找不到为止。

正则匹配两个方括号之间的内容,包括方括号本身要匹配字符串[baidu...
应该用正则表达式:\/\\[baidu\\][\\s\\S]*?\\[\\\/baidu\\]\/i 取第0捕获组的数据,就是字符串[baidu] ... [\/baidu]的所有内容 你的正则表达式\/\\[baidu\\]([\\s\\S]*)\\[\\\/baidu\\]\/Ui如果有两个[\/baidu],它就会匹配最长的字符串(贪婪匹配),比如字符串:[baidu] ... [\/baidu][baidu] .....

JS 正则表达式 匹配两个字符串之间的字符串
Javascript正则表达式 \/\\((.+?)\\)(.+?)\\(\\\/\\1\\)\/ig完整的匹配两个字符串之间的字符串的Javascript程序如下 var str='(pl)\\n(lc)1 (\/lc)\\n(nr)为什么 (\/nr)\\n (zz)组长 (\/zz) \\n (rq)2017-06-24 15:03:56.0 (\/rq)\\n(\/pl)\\n(pl)\\n (lc)2 (\/lc)\\n (nr)我要吃...

python如何用正则表达式匹配两个字符串之间的字符串中的某个字符并进 ...
你好,匹配和替换是两个操作,你可以分两步来做。第一步匹配:hit=re.search(“(\\<question\\>\\)”,inputstr)第二步替换 result=re.sub(‘”’,‘\\”’,inputstr)

正则表达式排除特定字符串
一、匹配所有标签 \\<.[^<>]*\\> 思路:1、首先匹配<和>,得到"\\<.*\\>",(\\为转义,<和>加不加都可以)但出现多个标签在一组中。2、排除中间的<和>,表达式改为"\\<.[^<>]*\\>"。3、如果想得到不包含属性的所有标签,可以加个字符数限制,根据标签字符数,表达式改为“\\<\\S[^<>]{...

vb正则表达式中匹配查找两个特殊符¥和#中间的内容 ”¥文本#”并输出...
结果如下:Private Sub Form_Load()Dim aa, bb, c1, c2 As String '定义变量aa = "askldfa¥12345678#asfklasd" ‘目标字符串c1 = InStr(1, aa, "¥") '找到第一次出现"¥"的位置 c2 = InStr(1, aa, "#") '找到第一次出现"#"的位置 bb = Mid(aa, c1, c2 - ...

相似回答