我有一个像这样的字符串:
$str1 = "12 ounces";
$str2 = "1.5 ounces chopped;
我想从字符串中获取金额,无论它是否是小数(12 或 1.5),然后获取紧邻的前一个测量值(盎司)。
我能够使用一个非常基本的正则表达式来获取测量值,但是获取小数/整数给我带来了问题。
感谢您的帮助!
如果您只想获取数据,则可以使用松散的正则表达式:
([\d.]+)\s+(\S+)
您可以获取第一个捕获组中的数字,以及第二个捕获组中的单位。
你可以对数字严格一点:
(\d+(?:\.\d*)?|\.\d+)\s+(\S+)
- 唯一的改变是
(\d+(?:\.\d*)?|\.\d+)
,所以我只解释这部分。这有点严格,但是否更严格更好取决于输入域和您的要求。它将匹配整数34
, 带小数部分的数字3.40000
并允许.5
and 34.
案件通过。超过的号码会被拒绝.
,或者只包含一个.
. The |
充当分隔 2 个不同模式的 OR:\.\d+
and \d+(?:\.\d*)?
.
-
\d+(?:\.\d*)?
:这将匹配并(隐式)断言整数部分中至少一位数字,后跟optional .
(需要转义\
since .
表示任何字符)和小数部分(可以是 0 个或多个数字)。可选性由下式表示?
在最后。()
可用于分组和捕获 - 但如果不需要捕获,则(?:)
可用于禁用捕获(节省内存)。
-
\.\d+
:这将匹配以下情况.78
。它匹配.
后跟至少一个(表示为+
) digit.
如果您想确保从输入字符串中获得有意义的内容,这不是一个好的解决方案。您需要先定义所有预期单位,然后才能编写仅捕获有效数据的正则表达式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)