导航:首页 > 编程语言 > java正则捕获组

java正则捕获组

发布时间:2022-08-28 07:39:02

Ⅰ 正则表达式:()这个捕获组是什么意思有什么特殊意义吗

在正则中,小括号() 表示捕获组
这个组,也就是在匹配的时候,将某一部分的字符(串)作为组处理,这个组,可以在正则表达式的其它位置或者匹配的结果中使用,如:
^\s+([a-zA-Z]+?)\s.+$

匹配 " abcd 这是什么"
如果没有小括号,那么匹配只有一个结果,也就是整个字符串" abcd 这是什么"
而添加了小括号,匹配就会有两个结果了:
1 " abcd 这是什么"
2 "abcd"

Ⅱ 关于java正则非捕获组的一些问题

前一个正则是不会捕获任何东西的,但是后面的正则会捕获(\\d{3})这个分组。

(?:)并不是说这个非捕获分组中的其他分组也不捕获。其实你第二个正则的非捕获分组根本就没有任何效果,因为这个地方根本不用分组,不需要小括号,你加非捕获分组就是画蛇添足,而且它也不会影响它内部的其他捕获分组。
你要知道,只有你需要分组的时候才会用到()或者(?:),如果你不需要分组,那就不要用(?:),因为根本没有任何效果。

Ⅲ java正则表达式捕获组的问题"^([^.]+\\.)+" []中算一个捕获组吗,()外^+算在捕获组中吗

  1. []不算一个捕获组

  2. ()外的内容不算在捕获组当中,而且^+本来就不会被捕获……

举个例子:

"123.456.789.".replaceAll("^([^.]+\.)+", "$1")

字符串123.456.789.最后会被替换为789.因为捕获组$1最后捕获的内容是789.

Ⅳ javascript中的“捕获组”是什么意思

“捕获组”是正则表达式中的概念,除了 JavaScript,在其他正则表达式的应用场景中也都是通用的。下面主要以 JavaScript 中的捕获组为例说明。

首先,在正则表达式中,可以进行“分组”,用一对圆弧括号括起来的表达式就是一个分组。

/(pattern)///JS中分组的基本写法

比如,“/(sun)(day)/”就表示了由“sun”和“day”子表达式构成的两个分组,它最终的匹配效果和“/sunday/”一致,只是分组之后可以将各组子表达式的匹配结果分别处理,操作更加灵活。其实,这两个分组也是捕获组。

捕获组就是将正则表达式中子表达式匹配的结果,分组按顺序保存,之后可以通过序号或名称来使用这些内容。不过,暂时 JavaScript 还不支持为捕获组命名,因此也就无法通过名称来访问捕获组,只能通过序号访问。

下面举3个匹配简单整数四则运算的例子,介绍一下捕获组的基本用法。

1)通过捕获组分别读取前运算数、运算符和后运算数:

varreg1=/(d+)([+-*/])(d+)/;
varmatches=reg1.exec("10*20");
varcomp=matches[0];//"10*20"
//序号0为匹配的内容,分组从1开始
varnum1=matches[1];//"10"
varsign=matches[2];//"*"
varnum2=matches[3];//"20"

捕获组还能反向引用,即在表达式中直接使用某个分组的内容。

2)匹配前、后两个数值的相同情况:

varreg2=/(d+)([+-*/])1/;//反向引用时用“+序号”即可
varresult1=reg2.test("25-25");//true
varresult2=reg2.test("25-14");//false

3)置换前、后两个数的位置(使用例 1 中的正则表达式):

varstr="234/156";
varchange=str.replace(reg1,"$3$2$1");//"156/234"
//在replace语句中引用的写法是“$+序号”


既然有捕获组,那肯定还有非捕获组。顾名思义,只执行匹配过程、不保存匹配结果的分组就是非捕获组。在捕获组表达式的左括号后加“?”和“:”等符号即可构成非捕获组。

/(?:pattern)///JS中非捕获组的基本写法

与非捕获组相关的还有“预查”,这些扩展知识就不多介绍了,感兴趣的话可以自行查找。

Ⅳ java正则表达式怎么一个个替换匹配的内容

Stringa="我是f_static_000的f_static_001aaaf_static_001";
//正则根据自己需要修改,replaceAll可以使用正则的捕获组功能,$n引用第n个捕获组
/**
replaceAll(regExp,replacement);第一个参数是正则字符串,第二个是替换内容
正则里面有捕获(正则里面用小括号捕获)和引用的功能
*/
a=a.replaceAll("(f_static_\d+)","#[face/png/$1.png]#");

Ⅵ java正则表达式,捕获组重命名怎么搞

1. 捕获组及其编号:
1) 捕获组之前讲过,就是匹配到的内容,按照()子表达式划分成若干组;
2) 例如正则表达式:(ab)(cd(ef))就有三个捕获组,没出现一对()就是一个捕获组
3) 捕获组编号规则:
i. 引擎会对捕获组进行编号,编号规则是左括号(从左到右出现的顺序,从1开始编号;
ii. 例如:

2. 反向引用:
1) 捕获组的作用就是为了可以在正则表达式内部或者外部(Java方法)引用它;
2) 如何引用?当然是通过前面讲的用捕获组的编号来引用咯!
3) 正则表达式内部引用:
i. \X:X是一个十进制数,X的范围必须落在捕获组编号范围之内,该表达式就匹配X号捕获组所匹配到的内容;
ii. 从上面的描述可以看出,\X匹配的内容是必须X号捕获组匹配成功之后才能确定的!
iii. 例如:([ab])\1,匹配aabbcc的结果是aa和bb,\1的内容必须要让1号捕获组捕获后才能确定,如果1号捕获的是a那么\1就是a,1号捕获到了b那么\1就是b;
4) 正则表达式外部引用:就是用Matcher对象的start、end、group查询匹配信息时,使用捕获组编号对捕获组引用(int group);

3. 捕获组命名:
1) 如果捕获组的数量非常多,那都用数字进行编号并引用将会非常混乱,并且难以记忆每个捕获组的内容及意义,因此对捕获组命名显得尤为重要;
2) Java 7开始提供了对捕获组命名的语法,并且可以通过捕获组的名称对捕获组反向引用(内外都行);
i. 命名捕获组的语法格式:(?<自定义名>expr)
ii. 例如:(?<year>\d{4})-(?<date>\d{2}-(?<day>\d{2}))
a. 有三个命名捕获组year、date和day
b. 从左到右编号分别为1、2、3(编号同样是有效的)
3) 命名捕获组的反向引用:
i. 正则表达式内引用:\k<捕获组名称>
!例如:(?<year>\d{4})-\k<year>可以匹配1999-1999
ii. 外部引用:Matcher对象的start、end、group的String name参数指定要查询的捕获组的名称;

Ⅶ java中正则表达式中非捕获组的一些问题

(?:X)是非捕获组,也就是X不单独作为一个分组提取出来,不能用match.group(num) 这样的语法提取出来,num指数字1-9
(?>X)是原子分组,没用过,一般正则的规则是尽可能的匹配,比如 ([0-9]+)5 这个正则可以匹配“12345"这个字符串,因为[0-9]+虽可以匹配所有的数字,但为了匹配数字5必须回溯一位,[0-9]+匹配1234,如果正则是(?>[0-9]+)5则是不回溯的,不匹配。
2、求一个正则表达式的写法,可以匹配比如说:开始和结尾分别是dog和cat,但是中间位置上不能有pig
^dog((?!pig).)*cat$

Ⅷ Java中 正则表达式中 组 是怎么用的我看了n遍,没看懂

组其实就是用来提取正则中匹配到的内容。
比如有正则表达式:abc(\d{2,5})efg,这个正则本身的意思很简单,就是字符串abc和efg之间有2到5个数字,所以字符串"abc12efg"、“abc34567efg”都能满足这个正则匹配。这个相信你能理解。
那么正则表达式模式中用小括号包起来的"\d{2,5}"这部分就叫“捕获组”,正则表达式引擎会将这部分匹配到的内容记下来,以便以后取用。java代码中,可以在调用Matcher对象的find方法得到true的返回值的时候(true说明正则表达式模式找到了符合匹配的内容),调用该Matcher对象的group(int groupNo)方法获得指定的组内容。还拿刚才那个例子来说,调用matcher.group(1)就会得到"12"、“34567”这样实际匹配的内容。这里要特别注意一下,组编号是从1开始计算的。0号组实际上就是整个正则表达式匹配到的内容。
再深入一点,上面讲到的所谓组是“捕获组”,正则引擎会记下来匹配内容,但是有时候我们不需要捕获,只是想要限制匹配,就会用到非捕获组。如果你真明白了捕获组,再看非捕获组以及前瞻后顾就明白了。

Ⅸ Java正则表达式捕获组取消重复

\\1是指第一个捕获组,即前面(.)捕获的那个字符。

Ⅹ java正则<(.)+>表示什么意思

表示<>之间有任意一个(含)字符以上,括号表示捕获组,匹配后可以单独提取出括号内的内容,?代表最短匹配,比如<asdf>>>这样的输入,有?会匹配成<asdf>,没有?会匹配整个<asdf>>>。

str.ReplactAll("<(.)+?>","")就是把所有<>间有一个字符以上的文字都替换为空。比如
asdf<1234>jkl<>会变成asdfjkl<>

阅读全文

与java正则捕获组相关的资料

热点内容
卸载联想app哪个好 浏览:719
php文字转图片 浏览:328
豆客后台怎么加密码 浏览:574
jpg转换pdf破解版 浏览:978
php基础书籍推荐 浏览:775
服务器与外网不通如何验证 浏览:351
电子版是不是就是文件夹 浏览:50
游戏属性文件加密 浏览:462
如何让安卓手机桌面图标下移 浏览:528
ubuntuphp5环境搭建 浏览:99
赌瘾解压视频 浏览:917
晋城移动dns服务器地址 浏览:294
php开源文库系统 浏览:134
android记事本源码 浏览:406
安卓11小游戏怎么玩法 浏览:189
gif有损压缩 浏览:936
windows下安装linux命令操作 浏览:843
米家app怎么设置进门亮灯 浏览:652
任我行服务器为什么会影响截图 浏览:296
安卓留言板怎么删除 浏览:18