Regex 如何检查正则表达式中的两个子表达式中是否至少有一个匹配?

Regex 如何检查正则表达式中的两个子表达式中是否至少有一个匹配?,regex,syntax,Regex,Syntax,我正在尝试将浮点十进制数与正则表达式匹配。小数点前可能有数字,也可能没有数字,小数点后可能有数字,也可能没有数字,如果有数字,小数点后可能有数字,也可能没有数字。(对于该应用,不允许前导+/-或尾随“E123”)。我写了这个正则表达式: /^([\d]*)(\.([\d]*))?$/ 正确匹配以下内容: 1 1. 1.23 .23 但是,这也匹配空字符串或仅包含小数点的字符串,这是我不想要的 目前,我正在运行正则表达式后检查$1或$3的长度是否大于0。如果不是,则无效。有没有一种方法可以直接

我正在尝试将浮点十进制数与正则表达式匹配。小数点前可能有数字,也可能没有数字,小数点后可能有数字,也可能没有数字,如果有数字,小数点后可能有数字,也可能没有数字。(对于该应用,不允许前导+/-或尾随“E123”)。我写了这个正则表达式:

/^([\d]*)(\.([\d]*))?$/
正确匹配以下内容:

1
1.
1.23
.23
但是,这也匹配空字符串或仅包含小数点的字符串,这是我不想要的


目前,我正在运行正则表达式后检查$1或$3的长度是否大于0。如果不是,则无效。有没有一种方法可以直接在正则表达式中执行此操作?

我认为这可以满足您的要求。它要么以数字开头,在这种情况下,小数点及其后的数字是可选的;要么以小数点开头,在这种情况下,小数点后至少必须有一个数字

/^\d+(\.\d*)?|\.\d+$/

为每种情况和/或它们创建一个正则表达式。那么您只需要在表达式匹配时进行测试

/^(\d+(\.\d*)?)|(\d*\.\d+)$/

很晚才回答,但喜欢回答,取自

更新
[\d]*\.?[\d]+?[\d]+\.
将帮助您匹配
1.


我实际上是用Java来做的,但我在这里发布它的时候就好像它是Perl一样,因为Java的正则表达式引擎是对人类尊严的冒犯。什么遗憾的正则表达式引擎不支持+?我冒昧地将代码更改为如果您确信+得到支持,您将拥有的代码。我正在考虑一些版本的grep、sed和ed,但原始海报可能使用了更新的版本。这是一种习惯,你会在那些从没有使用GNU工具的Unix系统起步的人身上看到。我还使用了ZCAT而不是-Z选项到TAR。未能匹配<代码> 1。< /代码>,我需要考虑在我的APP中有效。现在,您已经重新编写了我原来的正则表达式。它匹配空字符串和
,这正是我试图解决的问题。我认为没有“或”条件是不可能的。@Kip可能这就是你所期望的
[\d]*\?[\d]+?[\d]*\。
我尝试了
条件
[-+]?[\d]*\.?[\d]+?