preg_match_all 价格的正则表达式
Regex for preg_match_all prices
我需要为这些表达式设置正则表达式:
number€
number €
€number
€ number
需要输出:数字 €
number$
number $
$number
$ number
需要输出:数字$
我必须为每一个写一个正则表达式吗?哪种方法简单?
数字示例€:
preg_match_all("/((?:[0-9]*[.,])?[0-9]+)\p{Sc}/u", $post->post_title, $percentage, PREG_SET_ORDER);
if(isset($percentage[0][0]) && $percentage[0][0] != "" ){
$text = $percentage[0][1]." €";
谢谢
您似乎可以使用一个带有 preg_replace_callback
:
的正则表达式
/(?J)(?<num>[0-9]*[.,]?[0-9]+)\s*(?<cur>\p{Sc})|(?<cur>\p{Sc})\s*(?<num>[0-9]*[.,]?[0-9]+)/u
参见regex demo and a PHP demo:
$re = '/(?J)(?<num>[0-9]*[.,]?[0-9]+)\s*(?<cur>\p{Sc})|(?<cur>\p{Sc})\s*(?<num>[0-9]*[.,]?[0-9]+)/u';
$str = '12€';
echo preg_replace_callback($re, function($m) {
return $m["num"] . " " . $m["cur"];
}, $str);
或者,要提取 number currency
顺序的值,请使用相同的正则表达式和以下代码:
$res = array();
preg_replace_callback($re, function($m) use (&$res) {
array_push($res, $m["num"] . " " . $m["cur"]);
return $m[0];
}, $str);
print_r($res);
参见 another PHP demo。
图案详情:
(?J)
- PCRE_INFO_JCHANGED 修饰符,以便相同匹配的组可以在模式中多次使用
(?<num>[0-9]*[.,]?[0-9]+)
- "num" 组捕获 float/integer
\s*
- 0+ 个空格
(?<cur>\p{Sc})
- 组 "cur" 捕获货币符号
|
- 或(然后以不同的顺序与上面相同)
(?<cur>\p{Sc})\s*(?<num>[0-9]* [.,]?[0-9]+)
- 货币符号("cur" 组),0+ 个空格,一个 float/integer(在 "num" 组中)。
我需要为这些表达式设置正则表达式:
number€
number €
€number
€ number
需要输出:数字 €
number$
number $
$number
$ number
需要输出:数字$
我必须为每一个写一个正则表达式吗?哪种方法简单?
数字示例€:
preg_match_all("/((?:[0-9]*[.,])?[0-9]+)\p{Sc}/u", $post->post_title, $percentage, PREG_SET_ORDER);
if(isset($percentage[0][0]) && $percentage[0][0] != "" ){
$text = $percentage[0][1]." €";
谢谢
您似乎可以使用一个带有 preg_replace_callback
:
/(?J)(?<num>[0-9]*[.,]?[0-9]+)\s*(?<cur>\p{Sc})|(?<cur>\p{Sc})\s*(?<num>[0-9]*[.,]?[0-9]+)/u
参见regex demo and a PHP demo:
$re = '/(?J)(?<num>[0-9]*[.,]?[0-9]+)\s*(?<cur>\p{Sc})|(?<cur>\p{Sc})\s*(?<num>[0-9]*[.,]?[0-9]+)/u';
$str = '12€';
echo preg_replace_callback($re, function($m) {
return $m["num"] . " " . $m["cur"];
}, $str);
或者,要提取 number currency
顺序的值,请使用相同的正则表达式和以下代码:
$res = array();
preg_replace_callback($re, function($m) use (&$res) {
array_push($res, $m["num"] . " " . $m["cur"]);
return $m[0];
}, $str);
print_r($res);
参见 another PHP demo。
图案详情:
(?J)
- PCRE_INFO_JCHANGED 修饰符,以便相同匹配的组可以在模式中多次使用(?<num>[0-9]*[.,]?[0-9]+)
- "num" 组捕获 float/integer\s*
- 0+ 个空格(?<cur>\p{Sc})
- 组 "cur" 捕获货币符号|
- 或(然后以不同的顺序与上面相同)(?<cur>\p{Sc})\s*(?<num>[0-9]* [.,]?[0-9]+)
- 货币符号("cur" 组),0+ 个空格,一个 float/integer(在 "num" 组中)。