为了账号安全,请及时绑定邮箱和手机立即绑定

如何处理Java正则表达式?

如何处理Java正则表达式?

慕婉清6462132 2023-03-17 17:13:58
我正在处理正则表达式,但我不是它的忠实粉丝,我有义务在我的任务中处理它:(我已经花了几个小时寻找解决方案,但每次我都无法涵盖所有情况。我必须编写一个支持这些模式的正则表达式模板: 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]*)\\..*\\..* $请任何帮助。我将不胜感激。
查看完整描述

4 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

示例中有很多模式可以用来设计表达式。例如,我们可以从这个表达式开始:

^[^-]+-[^-]+-[^_]+_([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));

    }

}

正则表达式电路

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

//img1.sycdn.imooc.com//64142f80000142a511230217.jpg


查看完整回答
反对 回复 2023-03-17
?
慕森王

TA贡献1777条经验 获得超3个赞

试试这个:

^\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


查看完整回答
反对 回复 2023-03-17
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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

因为有 1 个下划线,所以你想匹配它后面的连字符,但是下划线后面没有连字符可以匹配,所以没有匹配。

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

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

解释

  • ^字符串的开始

  • [^-]+-匹配 1+ 次除以下以外的任何字符-

  • [^-]+-同上

  • \d+(?:\.\d+){3}数学 1+ 数字,重复 3 次匹配 a.和 1+ 数字

  • _匹配下划线

  • \d+(?:\.\d+){3}数学 1+ 数字,重复 3 次匹配 a.和 1+ 数字

  • [ ]$匹配一个空格(为清楚起见在括号之间表示)并断言字符串结尾

在爪哇

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

正则表达式演示

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


查看完整回答
反对 回复 2023-03-17
?
FFIVE

TA贡献1797条经验 获得超6个赞

DYYU-tx-(?>\d+[._]?){8}
  1. 搜索文字 DYYU-tx-

  2. 寻找 1 个或多个后面可能跟有 a._8 次的数字。

我假设它总是以 DYYU-tx- 开头,并且它总是 4 个数字,用句点分隔,后跟一个下划线,然后再有 4 个数字,用句点分隔。


查看完整回答
反对 回复 2023-03-17
  • 4 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信