【发布时间】:2015-12-06 17:22:27
【问题描述】:
以下是我的文字:
Total: ₹ 131.84
Thanks for choosing Uber, Pradeep
我想匹配金额部分,使用以下代码:
if ( $mail_body =~ /Total: \x{20B9} (\d+)/ ) {
$amount = $1;
}
但是,它不匹配,尝试使用正则表达式调试,这是输出:
Compiling REx "Total: \x{20B9} (\d+)"
Final program:
1: EXACT <Total: \x{20b9} > (5)
5: OPEN1 (7)
7: PLUS (9)
8: DIGIT (0)
9: CLOSE1 (11)
11: END (0)
anchored utf8 "Total: %x{20b9} " at 0 (checking anchored) minlen 10
Matching REx "Total: \x{20B9} (\d+)" against "Total: %342%202%271%302%240131.84%n%nThanks for choosing Ube"...
UTF-8 pattern...
Match failed
Freeing REx: "Total: \x{20B9} (\d+)"
【问题讨论】:
-
如果你输出
$mail_body会是什么样子? -
这里显示匹配:regex101.com/r/iO5aL8/2
-
@karthikmanchala 我知道。但它是兼容的。不一样。
-
其实可以用
/Total:\s+\xE2\x82\xB9\s+(\d+)/。 -
%342%202%271%302%240 转换为 e2 82 b9 c2 a0,所以 @stribizhev 的方法应该有效。旁注: (\d+(.\d*)?) 还捕获逗号后面的部分。