繁体   English   中英

需要用正则表达式说明(帮助)

[英]Need clarification(help) with regular expression

好吧,我有一个用空格分隔的词组。 每个元素只能是整数或实数,最后两个元素可以为字符串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中,并且需要相应地将组或元素分开。

编辑:谢谢大家的好评。 显然,我需要更多练习,也许还需要睡觉! 我的正则表达式现在看起来更干净了。

修正表达

(\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)

他们将再也无法匹配“ nothing”,并且会按照您希望的方式排列。

您也可以将其翻转,并使其强制匹配为“ null”(无内容):

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

如果您始终希望使用以下格式:

Number Number Number Number|null Number|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)

*表示0或更大,而+表示1或更大。

实数的十进制组必须通过?设置为可选? ,并且由于整数不是可选的,因此请使用+代替*

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

暂无
暂无

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

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