java 正则 group name_正则表达式在Java中的命名组

小编典典

每个名称只能具有一个命名组(你并不总是可以控制!),并且不能将它们用于正则表达式内递归。

注意:你可以在Perl和PCRE正则表达式中找到真正的正则表达式递归示例,如Regexp Power,PCRE规范和带有平衡括号的匹配字符串幻灯片中所述)

例:

String:

"TEST 123"

RegExp::

"(?\\w+) (?\\d+)"

Access

matcher.group(1) ==> TEST

matcher.group("login") ==> TEST

matcher.name(1) ==> login

Replace

matcher.replaceAll("aaaaa_$1_sssss_$2____") ==> aaaaa_TEST_sssss_123____

matcher.replaceAll("aaaaa_${login}_sssss_${id}____") ==> aaaaa_TEST_sssss_123____

public final class Pattern

implements java.io.Serializable

{

[...]

/**

* Parses a group and returns the head node of a set of nodes that process

* the group. Sometimes a double return system is used where the tail is

* returned in root.

*/

private Node group0() {

boolean capturingGroup = false;

Node head = null;

Node tail = null;

int save = flags;

root = null;

int ch = next();

if (ch == '?') {

ch = skip();

switch (ch) {

case '

ch = read();

int start = cursor;

[...]

// test forGroupName

int startChar = ch;

while(ASCII.isWord(ch) && ch != '>') ch=read();

if(ch == '>'){

// valid group name

int len = cursor-start;

int[] newtemp = new int[2*(len) + 2];

//System.arraycopy(temp, start, newtemp, 0, len);

StringBuilder name = new StringBuilder();

for(int i = start; i< cursor; i++){

name.append((char)temp[i-1]);

}

// create Named group

head = createGroup(false);

((GroupTail)root).name = name.toString();

capturingGroup = true;

tail = root;

head.next = expr(tail);

break;

}

2020-03-06

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值