繁体   English   中英

如何处理Java正则表达式?

[英]How to deal with Java regular expressions?

我正在处理正则表达式,但是我不是它的忠实拥护者,因此我不得不在任务中处理它:(

我已经花了数小时寻找解决方案,但是每次我无法涵盖所有​​情况时。 我必须编写一个支持以下模式的正则表达式模板:

 DYYU-tx-6.7.9.7_6.1.1.0 
 DYYU-tx-6.7.9.7_60.11.11.09 
 DYYU-tx-60.70.90.70_6.1.1.0 

我觉得这很简单。如果对某人来说这是一个愚蠢的问题,请原谅:(

我尝试了这种模式,但没有用: ^.*_.*-.*-([0-9]*)\\\\..*\\\\..* $

请帮忙。 我将不胜感激。

样本中有许多模式可用于设计表达式。 例如,我们可以从以下表达式开始:

^[^-]+-[^-]+-[^_]+_([0-9]+\.){3}[0-9]+$

如果您想探索/简化/修改该表达式,请在此演示的右上面板中进行说明,如果愿意,可以在此链接中逐步查看该表达式与某些示例输入的匹配情况。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^[^-]+-[^-]+-[^_]+_([0-9]+\\.){3}[0-9]+$";
final String string = "DYYU-tx-6.7.9.7_6.1.1.0\n"
     + "DYYU-tx-6.7.9.7_60.11.11.09\n"
     + "DYYU-tx-60.70.90.70_6.1.1.0";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

RegEx电路

jex.im可视化正则表达式:

在此处输入图片说明

试试这个:

^\w+-\w+-(\d+)(\.\d+)+_(\d+\.)+\d+

演示版

在Java中,最可能是这样的:

"^\\w+-\\w+-(\\d+)(\\.\\d+)+_(\\d+\\.)+\d+"

说明:

  • ^\\w+-\\w+-前两个部分,例如DYYU-tx-
  • (\\d+)(\\.\\d+)+_数字,以分隔. _结尾,例如6.7.9.7_
  • (\\d+\\.)+\\d+数字与分隔. ,例如60.11.11.09

您的模式不匹配,因为您使用的.*会首先匹配,直到字符串末尾。 然后,您匹配一个_ ,使其回溯到最后一个下划线,并尝试匹配该模式的其余部分。

由于有1个下划线,因此您想匹配其后的连字符,但是下划线后没有要匹配的连字符,因此没有匹配项。

编写它的另一种方法可能是使用不匹配连字符的否定字符类 [^-]而不是使用.*

^[^-]+-[^-]+-\d+(?:\.\d+){3}_\d+(?:\.\d+){3} $

说明

  • ^字符串开头
  • [^-]+-匹配除+以外的任意字符1+次-
  • [^-]+-同上
  • \\d+(?:\\.\\d+){3}数学1个以上的数字,与a匹配重复3次. 和1个以上的数字
  • _匹配下划线
  • \\d+(?:\\.\\d+){3}数学1个以上的数字,与a匹配重复3次. 和1个以上的数字
  • [ ]$匹配一个空格(为了清楚起见,在括号之间表示)并断言字符串的结尾

在Java中

String regex = "^[^-]+-[^-]+-\\d+(?:\\.\\d+){3}_\\d+(?:\\.\\d+){3} $";

正则表达式演示

请注意,在示例数据中,字符串以空格结尾,因此$之前有一个空格

DYYU-tx-(?>\d+[._]?){8}
  1. 搜索文字DYYU-tx-
  2. 查找1个或多个数字,后跟一个. _ 8次。

我假设它将始终以DYYU-tx-开头,并且始终是4个数字,并用句点分隔,然后再加上下划线,然后再有4个数字以句点分隔。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM