正则 匹配 结果

正则 匹配 结果

挖坑埋你

正则 匹配 结果
于 2018-01-08 17:50:29 发布
正则 匹配 结果
17849
正则 匹配 结果
收藏 12

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

使用正则表达式EDIT

正则表达式可以被用于RegExpexectest方法以及 Stringmatchreplacesearchsplit方法。这些方法在JavaScript 手册中有详细的解释。

表 4.2 使用正则表达式的方法
方法 描述
exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。

当你想要知道在一个字符串中的一个匹配是否被找到,你可以使用test或search方法;想得到更多的信息(但是比较慢)则可以使用exec或match方法。如果你使用exec或match方法并且匹配成功了,那么这些方法将返回一个数组并且更新相关的正则表达式对象的属性和预定义的正则表达式对象(详见下)。如果匹配失败,那么exec方法返回null(也就是false)。

在接下来的例子中,脚本将使用exec方法在一个字符串中查找一个匹配。

var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");

如果你不需要访问正则表达式的属性,这个脚本通过另一个方法来创建myArray:

var myArray = /d(b+)d/g.exec("cdbbdbsbz");

如果你想通过一个字符串构建正则表达式,那么这个脚本还有另一种方法:

var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");

通过这些脚本,匹配成功后将返回一个数组并且更新正则表达式的属性,如下表所示。

表 4.3 正则表达式执行返回信息
对象 属性或索引 描述 在例子中对应的值
myArray   匹配到的字符串和所有被记住的子字符串。 ["dbbd", "bb"]
index 在输入的字符串中匹配到的以0开始的索引值。 1
input 初始字符串。 "cdbbdbsbz"
[0] 匹配到的所有字符串(并不是匹配后记住的字符串)。注:原文"The last matched characters.",应该是原版错误。匹配到的最后一个字符索引。 "dbbd"
myRe lastIndex 下一个匹配的索引值。(这个属性只有在使用g参数时可用在 通过参数进行高级搜索 一节有详细的描述.) 5
source 模式文本。在正则表达式创建时更新,不执行。 "d(b+)d"

正则表达式匹配多个结果,并遍历所有的结果

正则 匹配 结果

可爱组长

正则 匹配 结果
于 2019-08-09 17:41:28 发布
正则 匹配 结果
21619
正则 匹配 结果
收藏 7

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

问题描述

需要使用正则表达式匹配到多个结果,并获取到多个结果:例如需要匹配如下中括号的(包括中括号)然后替换调中括号中的字(包括中括号),最后的结果是abcdefghk

abc[笑a哭][笑b哭][笑c哭]def[笑d哭][笑e哭][笑f哭]ghk

思路

1.需要用到正则表达式中非贪婪的匹配。也就是以字符 "["开始,字符“]”结束,而且是越短越好。也就是非贪婪的表达

字符功能
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有

贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配

2.如果匹配到了多个,如何将所有匹配到的结果,打印,或是替换调。需要使用到while循环
3.提供一个在线的测试网址 http://tool.chinaz.com/regex/

正则 匹配 结果

其中匹配到的不同颜色,表示匹配到了多个,现在需要获取到匹配到的每一个 需要使用while

代码实现

	public static void main(String[] args) {
		String title = "abc[笑a哭][笑b哭][笑c哭]def[笑d哭][笑e哭][笑f哭]ghk";
//		String regex = "(\\[[\\u4e00-\\u9fa5].+?\\])"; //   \u4e00-\u9fa5,表示匹配到中文
		String regex = "(\\[[\\w\\W].+?\\])";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(title);
		while(m.find()){
			String group = m.group();
			title = title.replace(group, "");
			System.out.println(title);
		}
	}

结果

abc[笑b哭][笑c哭]def[笑d哭][笑e哭][笑f哭]ghk
abc[笑c哭]def[笑d哭][笑e哭][笑f哭]ghk
abcdef[笑d哭][笑e哭][笑f哭]ghk
abcdef[笑e哭][笑f哭]ghk
abcdef[笑f哭]ghk
abcdefghk