好的,我有一个用空格分隔的短语。每个元素只能是整数或实数,最后两个元素除外,可以为字符串 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/