请教一个正则表达式,匹配以某开头,某结尾的所有字符串的写法

时间:2022-02-08 05:49:25
想匹配以 [@cms.List  开头,以 [/cms]结尾的所有字符串

字符串:

<html>
<body>

<table border=1>
[@cms.List chnlId='3']
<tr>
    <td>标题:[@cms.ArtiContent.title /]</td>
    <td>作者:[@cms.ArtiContent.author /]</td>
</tr>
[/cms]
</table>

</p>

<table border=1>
[@cms.ListPage chnlId='3']
<tr>
    <td>标题2:[@cms.ArtiContent.title /]</td>
    <td>作者2:[@cms.ArtiContent.author /]</td>
</tr>
[/cms]
</table>

</body>
</html> 
 


我用的方法是:



String tag = "\\u005B@cms.List([\\w\\W\\s]*?)\\u005B/cms\\u005D";
Pattern ptag = Pattern.compile(tag);
Matcher mtag = ptag.matcher(template);
while (mtag.find()) {
  for (int i = 0; i <= mtag.groupCount(); i++) {
System.out.println("==>标签:" + mtag.group(i)+"<===\n\n");
  }
}


结果匹配的有重复,且不完整,可能是正则表达式不正确,请教各位。。。。


5 个解决方案

#1


问题描述不清!

1:你只说了开头和结尾,那当中呢?当中允许出现什么样的字符?允许换行么?这些东西会嵌套么?
2:再拿开头和结尾来说,匹配时需要不区分大小写么?

等等诸如此类!


如果问正则表达式的话,请在提问时达到下面最为基本的要求:

1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要 详细说明具体要做些什么;
2,对于查找的问题, 详细说明寻找字符串的特征是什么,这些字符串的边界是什么,或者说有些什么规律;
3,对于替换的问题, 详细说明原串是什么,替换后是什么,有些什么规律;
4,对于验证的问题, 详细说明验证的格式是什么;
5,举两三个覆盖范围 尽可能广的示例。需要注意的是, 所回复的正则表达式仅仅能满足所提供的示例! 

#2


\[@cms\.List[^\]]*\](.|\n)+?\[\/cms\] 要这个吗

#3


引用 1 楼 bao110908 的回复:
问题描述不清!

1:你只说了开头和结尾,那当中呢?当中允许出现什么样的字符?允许换行么?这些东西会嵌套么?
2:再拿开头和结尾来说,匹配时需要不区分大小写么?

等等诸如此类!


如果问正则表达式的话,请在提问时达到下面最为基本的要求:

1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要详细说明具体要做些什么;
2,对于查找的问题,详细说明寻找字符串的……

顶!!
楼主还是把问题描述清楚吧

#4


引用 1 楼 bao110908 的回复:
问题描述不清!

1:你只说了开头和结尾,那当中呢?当中允许出现什么样的字符?允许换行么?这些东西会嵌套么?
2:再拿开头和结尾来说,匹配时需要不区分大小写么?

等等诸如此类!


如果问正则表达式的话,请在提问时达到下面最为基本的要求:

1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要详细说明具体要做些什么;
2,对于查找的问题,详细说明寻找字符串的特……


非常感谢您的回答

1:你只说了开头和结尾,那当中呢?当中允许出现什么样的字符?允许换行么?这些东西会嵌套么?
    当中可以用任何字符;
    允许换行;
    [@cms.]  [/cms]之间不允许嵌套,我只需要取出[@cms.].....[/cms]这部分内容

2:再拿开头和结尾来说,匹配时需要不区分大小写么?
     开头和结尾,我在程序中已全部转化为小写,不需要考虑。

#5


String regex = "(?i)\\[@cms\\.List(.*?)\\[/cms";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()) {
    System.out.println(m.group(1));
}


2:再拿开头和结尾来说,匹配时需要不区分大小写么?
  开头和结尾,我在程序中已全部转化为小写,不需要考虑。

[@cms.List 当中的 List 明明有大写的,还说全部转为小写了呢!

如果有大写、小写,上面表达式中 (?i) 就可以了,如果都是统一的,把 (?i) 去掉就可以了。

#1


问题描述不清!

1:你只说了开头和结尾,那当中呢?当中允许出现什么样的字符?允许换行么?这些东西会嵌套么?
2:再拿开头和结尾来说,匹配时需要不区分大小写么?

等等诸如此类!


如果问正则表达式的话,请在提问时达到下面最为基本的要求:

1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要 详细说明具体要做些什么;
2,对于查找的问题, 详细说明寻找字符串的特征是什么,这些字符串的边界是什么,或者说有些什么规律;
3,对于替换的问题, 详细说明原串是什么,替换后是什么,有些什么规律;
4,对于验证的问题, 详细说明验证的格式是什么;
5,举两三个覆盖范围 尽可能广的示例。需要注意的是, 所回复的正则表达式仅仅能满足所提供的示例! 

#2


\[@cms\.List[^\]]*\](.|\n)+?\[\/cms\] 要这个吗

#3


引用 1 楼 bao110908 的回复:
问题描述不清!

1:你只说了开头和结尾,那当中呢?当中允许出现什么样的字符?允许换行么?这些东西会嵌套么?
2:再拿开头和结尾来说,匹配时需要不区分大小写么?

等等诸如此类!


如果问正则表达式的话,请在提问时达到下面最为基本的要求:

1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要详细说明具体要做些什么;
2,对于查找的问题,详细说明寻找字符串的……

顶!!
楼主还是把问题描述清楚吧

#4


引用 1 楼 bao110908 的回复:
问题描述不清!

1:你只说了开头和结尾,那当中呢?当中允许出现什么样的字符?允许换行么?这些东西会嵌套么?
2:再拿开头和结尾来说,匹配时需要不区分大小写么?

等等诸如此类!


如果问正则表达式的话,请在提问时达到下面最为基本的要求:

1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要详细说明具体要做些什么;
2,对于查找的问题,详细说明寻找字符串的特……


非常感谢您的回答

1:你只说了开头和结尾,那当中呢?当中允许出现什么样的字符?允许换行么?这些东西会嵌套么?
    当中可以用任何字符;
    允许换行;
    [@cms.]  [/cms]之间不允许嵌套,我只需要取出[@cms.].....[/cms]这部分内容

2:再拿开头和结尾来说,匹配时需要不区分大小写么?
     开头和结尾,我在程序中已全部转化为小写,不需要考虑。

#5


String regex = "(?i)\\[@cms\\.List(.*?)\\[/cms";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()) {
    System.out.println(m.group(1));
}


2:再拿开头和结尾来说,匹配时需要不区分大小写么?
  开头和结尾,我在程序中已全部转化为小写,不需要考虑。

[@cms.List 当中的 List 明明有大写的,还说全部转为小写了呢!

如果有大写、小写,上面表达式中 (?i) 就可以了,如果都是统一的,把 (?i) 去掉就可以了。