java - 需要正则表达式的说明(帮助)

标签 java regex

好的,我有一个用空格分隔的短语。每个元素只能是整数或实数,最后两个元素除外,可以为字符串 null。我的正则表达式是

([0-9]*\.[0-9]*|[0-9]*) ([0-9]*\.[0-9]*|[0-9]*) ([0-9]*\.[0-9]*|[0-9]*) ([0-9]*\.[0-9]*|[0-9]*|null) ([0-9]*\.[0-9]*|[0-9]*|null)

我不明白这句话的原因

123 15 3 null null

最后一个 null 没有被捕获。有人提到了“/”的使用,并告诉我它们就像正则表达式的引号,但在我看来,添加它必须通过正则表达式搜索该字符串。我以这种形式编写正则表达式,因为我将其实现到 java 中,并且需要相应地分隔组或元素。

编辑: 感谢大家的精彩回复。显然我需要更多练习,可能还需要一些 sleep !我的正则表达式现在看起来干净多了。

修改后的表达式

(\d+\.\d+|\d+) (\d+\.\d+|\d+) (\d+\.\d+|\d+) (\d+\.\d+|\d+|null) (\d+\.\d+|\d+|null)

最佳答案

这是由于您使用 * 修饰符定义您的或组的方式所致:

 ([0-9]*\.[0-9]*|[0-9]*|null)

通过上面的语句,[0-9]* 不可能匹配任何内容。如果可以的话,它将首先匹配。

当你连续有 2 个时:

([0-9]*\.[0-9]*|[0-9]*|null) ([0-9]*\.[0-9]*|[0-9]*|null)

现在强制匹配第一组中的“null”,但可以在第二组中不匹配任何内容。

如果您要将这些捕获组修改为:

([0-9]*\.[0-9]*|[0-9]+|null)

它们将无法再匹配“无”,并且会按照您想要的方式排列。

您也可以翻转它,并强制它在没有任何内容之前匹配“null”:

([0-9]*\.[0-9]*|null|[0-9]*)

关于java - 需要正则表达式的说明(帮助),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9918359/

相关文章:

regex - Azure 应用程序网关自定义 header 规则

Java错误,重复的局部变量

使用 Hibernate 标准查询的 Java 类转换异常

java - 如何处理不可能抛出的已检查异常

javascript - 定义匹配除特定字符串以外的任何内容的 JavaScript 正则表达式

java - 在 Java 中解析字符串的有效方法是什么?

java - JWT token 过期检查

java - 我对 Java 的类和类型的理解正确吗?

javascript - 替换内容同时忽略链接和 html 标签

regex - 分隔符之间的匹配文本:贪婪还是懒惰的正则表达式?