PHP 正则表达式获取括号内的浮点值
PHP regular expression get float value between brackets
我在从字符串中获取一些数字时遇到一点问题。
比如我有这样的str:
qweqeqe (qweqwe) AASD 213,21 ( -1201,77 EUR )
我需要括号内带逗号的数字
结果:-1201,77
该值也可以是正数。
我已经设法获得浮点值,但来自所有字符串。
我有这个:!\d+(?:\,\d+)?!
但它在 str.
中获取所有数字
试试这个模式:
$pattern = "#\([\s]*(-{0,1}[0-9]+,[0-9]+)[\s]*[A-Za-z]*[\s]*\)#";
如果括号内始终有 1 个数字...
这是一个两遍的 "readable" 方法:提取所有带括号的子字符串,然后使用 preg_filter
提取浮点值:
$s = "qweqeqe (qweqwe) AASD 213,21 ( -1201,77 EUR )";
preg_match_all('/\([^()]*\)/', $s, $parentheses);
$res = preg_filter('/.*?([+-]?\d+(?:,\d+)?).*/s', '', $parentheses[0]);
^^^ ^
这里,我们用.*
匹配float前后的任何符号。请注意,为了保留数字,我们需要在左侧部分(.*?
)使用惰性点匹配,我们可以匹配数字后面部分的任何内容。由于数字前的 +
/-
是可选的,因此使用 ?
量词:[-+]?
.
如果括号内可以有超过 1 个数字...
这是一种可读性较差的一次性方法:
$s = "qweqeqe (qweqwe) AASD 213,21 ( -1201,77 EUR )";
preg_match_all('/(?:\(|(?!^)\G)[^()]*?([+-]?\d+(?:,\d+)?)(?=[^()]*\))/', $s, $matches);
^^^^
这里,正则表达式用(?:\(|(?!^)\G)
定义起始边界(即开始寻找(
之后的数字,然后在每次匹配成功之后)然后用[=21捕获浮点数=] 但确保我们仍在括号内(最右边的边界使用 (?=[^()]*\))
前瞻检查)。
我在从字符串中获取一些数字时遇到一点问题。
比如我有这样的str:
qweqeqe (qweqwe) AASD 213,21 ( -1201,77 EUR )
我需要括号内带逗号的数字
结果:-1201,77
该值也可以是正数。
我已经设法获得浮点值,但来自所有字符串。
我有这个:!\d+(?:\,\d+)?!
但它在 str.
试试这个模式:
$pattern = "#\([\s]*(-{0,1}[0-9]+,[0-9]+)[\s]*[A-Za-z]*[\s]*\)#";
如果括号内始终有 1 个数字...
这是一个两遍的 "readable" 方法:提取所有带括号的子字符串,然后使用 preg_filter
提取浮点值:
$s = "qweqeqe (qweqwe) AASD 213,21 ( -1201,77 EUR )";
preg_match_all('/\([^()]*\)/', $s, $parentheses);
$res = preg_filter('/.*?([+-]?\d+(?:,\d+)?).*/s', '', $parentheses[0]);
^^^ ^
这里,我们用.*
匹配float前后的任何符号。请注意,为了保留数字,我们需要在左侧部分(.*?
)使用惰性点匹配,我们可以匹配数字后面部分的任何内容。由于数字前的 +
/-
是可选的,因此使用 ?
量词:[-+]?
.
如果括号内可以有超过 1 个数字...
这是一种可读性较差的一次性方法:
$s = "qweqeqe (qweqwe) AASD 213,21 ( -1201,77 EUR )";
preg_match_all('/(?:\(|(?!^)\G)[^()]*?([+-]?\d+(?:,\d+)?)(?=[^()]*\))/', $s, $matches);
^^^^
这里,正则表达式用(?:\(|(?!^)\G)
定义起始边界(即开始寻找(
之后的数字,然后在每次匹配成功之后)然后用[=21捕获浮点数=] 但确保我们仍在括号内(最右边的边界使用 (?=[^()]*\))
前瞻检查)。