我有一个字符串,如:
$str1 = "12 ounces";
$str2 = "1.5 ounces chopped;
我想从字符串得到的量是否是十进制或不(12或1.5),然后抓住紧接在前的测量(盎司)。
我可以用一个漂亮的正则表达式初步抢测量,但要小数/整数已经给我的问题。
谢谢你的帮助!
我有一个字符串,如:
$str1 = "12 ounces";
$str2 = "1.5 ounces chopped;
我想从字符串得到的量是否是十进制或不(12或1.5),然后抓住紧接在前的测量(盎司)。
我可以用一个漂亮的正则表达式初步抢测量,但要小数/整数已经给我的问题。
谢谢你的帮助!
如果你只是想获取数据,你可以只使用一个松散的正则表达式:
([\d.]+)\s+(\S+)
([\d.]+)
[\d.]+
将匹配的严格数字和的序列.
(这意味着在4.5.6
或....
匹配,但这些情况并不常见,而这仅仅是抓取数据),和括号,标志着我们将捕获匹配的文本。 的.
这里是内部字符类[]
所以没有必要逃跑。
其次是任意空格\s+
非空格字符和最大序列(由于贪婪量词) \S+
(非空间真的是无空间:它会以Unicode几乎所有的匹配,除了空格,制表符,新行,回车返回字符)。
你可以得到第一个捕获组中的单位第二捕获组的数量,和。
你可以在更严格的数了一下:
(\d+(?:\.\d*)?|\.\d+)\s+(\S+)
(\d+(?:\.\d*)?|\.\d+)
所以我只说明这一部分。 这是一个有点严格,但是否严格越好取决于输入域和您的要求。 这将匹配整数34
,数与小数部分3.40000
并允许.5
和34.
的情况下通过。 这将拒绝数量过多.
,或者只包含一个.
。 该|
作为OR其中分离2个不同的图案: \.\d+
和\d+(?:\.\d*)?
。 \d+(?:\.\d*)?
:这将匹配和(隐含地)断言在整数部分的至少一个位,随后可选的 .
(这需要与转义\
自从.
指任何字符)和小数部分(其可以是0个或更多个数字)。 可选性由以下指示?
在末尾。 ()
可用于分组和捕获-但如果不需要捕获,然后(?:)
可以用来禁止捕捉(节省内存)。 \.\d+
这将匹配的情况下,例如.78
。 它匹配.
随后通过至少一个(由所指+
)位。 如果你想确保你得到一些有意义的事了输入字符串这不是一个很好的解决方案。 您需要定义所有预期的单位之前,你可以写一个正则表达式,只有捕捉有效数据。
使用该正则表达式\b\d+([\.,]\d+)?
为了得到整数和小数,要么使用逗号或点加一个字,请使用以下正则表达式:
/\d+([\.,]\d+)?\s\S+/