Java正则表达式问题

标签 java regex

我有一段类似的文字

ab1ab2ab3ab4cd

是否可以创建一个 java 正则表达式来获取所有以 "ab" 开头并以 "cd" 结尾的子字符串?例如:

ab1ab2ab3ab4cd
ab2ab3ab4cd
ab3ab4cd
ab4cd

谢谢

最佳答案

如您所见,正则表达式 (?=(ab.*cd)) 会将此类匹配项分组到第 1 组:

import java.util.regex.*;

public class Main {
  public static void main(String[] args) throws Exception {

    Matcher m = Pattern.compile("(?=(ab.*cd))").matcher("ab1ab2ab3ab4cd");

    while (m.find()) {
      System.out.println(m.group(1));
    }
  }
}

产生:

ab1ab2ab3ab4cd
ab2ab3ab4cd
ab3ab4cd
ab4cd

你需要向前看,(?= ... ),否则你只会得到一个匹配项。请注意,如果字符串中的 cd 超过 2 个,则正则表达式将无法产生所需的结果。在这种情况下,您将不得不求助于一些手动字符串算法。

关于Java正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6030627/

相关文章:

java - 从 Object 变量获取 TreeSet 对象

java - 在 Java 中使用 RegEx 时出现模式错误

java - Hibernate 搜索在索引中存储 byte[]

python - 两者之间的匹配!在 python 的文件中

c# - 如何修复从删除条件注释中删除 HTML 注释的正则表达式?

java - 将 Spring 的健康指标映射到指标

java - 在 Web 应用程序中使用全局服务和 *PortType 类?

regex - 在 Bash 中使用逗号分隔的字符串作为变量的输入

php - 具有两个连续(相同或不同)匹配项的正则表达式

php - 两个符号之间但不是该符号的三个之间的字符串的正则表达式