java 正则 数组_java – 创建正则表达式匹配数组

你需要创建一个匹配器,并使用它来迭代地找到匹配。

import java.util.regex.Matcher;

import java.util.regex.Pattern;

...

List allMatches = new ArrayList();

Matcher m = Pattern.compile("your regular expression here")

.matcher(yourStringHere);

while (m.find()) {

allMatches.add(m.group());

}

之后,allMatches包含匹配,并且您可以使用allMatches.toArray(new String [0])获取一个数组,如果你真的需要一个。

你也可以使用MatchResult来编写帮助函数来循环匹配

因为Matcher.toMatchResult()返回当前组状态的快照。

例如,你可以写一个惰性迭代器让你做

for (MatchResult match : allMatches(pattern, input)) {

// Use match, and maybe break without doing the work to find all possible matches.

}

通过做这样的事情:

public static Iterable allMatches(

final Pattern p, final CharSequence input) {

return new Iterable() {

public Iterator iterator() {

return new Iterator() {

// Use a matcher internally.

final Matcher matcher = p.matcher(input);

// Keep a match around that supports any interleaving of hasNext/next calls.

MatchResult pending;

public boolean hasNext() {

// Lazily fill pending, and avoid calling find() multiple times if the

// clients call hasNext() repeatedly before sampling via next().

if (pending == null && matcher.find()) {

pending = matcher.toMatchResult();

}

return pending != null;

}

public MatchResult next() {

// Fill pending if necessary (as when clients call next() without

// checking hasNext()), throw if not possible.

if (!hasNext()) { throw new NoSuchElementException(); }

// Consume pending so next call to hasNext() does a find().

MatchResult next = pending;

pending = null;

return next;

}

/** Required to satisfy the interface, but unsupported. */

public void remove() { throw new UnsupportedOperationException(); }

};

}

};

}

有了这个,

for (MatchResult match : allMatches(Pattern.compile("[abc]"), "abracadabra")) {

System.out.println(match.group() + " at " + match.start());

}

产量

06004

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值