Php 带欧元符号的正则表达式
我正在使用正则表达式从HTML页面获取一些价格。我有英镑和美元的工作字符串,但一旦我将其更改为欧元,并将货币符号放在正则表达式字符串的末尾,它似乎就不起作用了 这是我的代码:Php 带欧元符号的正则表达式,php,regex,arrays,Php,Regex,Arrays,我正在使用正则表达式从HTML页面获取一些价格。我有英镑和美元的工作字符串,但一旦我将其更改为欧元,并将货币符号放在正则表达式字符串的末尾,它似乎就不起作用了 这是我的代码:preg\u match('/([0-9]+[\.]*[0-9]*)\€/',$totalprice,$value) 然而,$value返回一个空数组 谢谢 这似乎是编码的问题。如果可以接受,请尝试仅为正则表达式使用货币unicode符号 $totalprice = "595,95€"; preg_match('/((?:[
preg\u match('/([0-9]+[\.]*[0-9]*)\€/',$totalprice,$value)代码>
然而,$value返回一个空数组
谢谢 这似乎是编码的问题。如果可以接受,请尝试仅为正则表达式使用货币unicode符号
$totalprice = "595,95€";
preg_match('/((?:[0-9]*[.,])?[0-9]+)\p{Sc}/u', $totalprice, $value);
print_r($value);
这似乎是编码的问题。如果可以接受,请尝试仅为正则表达式使用货币unicode符号
$totalprice = "595,95€";
preg_match('/((?:[0-9]*[.,])?[0-9]+)\p{Sc}/u', $totalprice, $value);
print_r($value);
将u
修饰符添加到正则表达式字符串的末尾,告诉它接受unicode字符
preg_match('/([0-9]+[\.]*[0-9]*)\€/u', $totalprice, $value);
^
add this
将u
修饰符添加到正则表达式字符串的末尾,告诉它接受unicode字符
preg_match('/([0-9]+[\.]*[0-9]*)\€/u', $totalprice, $value);
^
add this
我会用这个正则表达式:
为了便于阅读,我将/
替换为#
正则表达式的部分解释:
\d
匹配数字(等于[0-9],略短)
[\.\,]
匹配
或,
作为十进制分隔符
*?
使*变为惰性,因此引擎首先尝试跳过前一项,然后再尝试与前一项不断增加的匹配项进行排列
\s?
匹配空格字符(?使其成为可选)
修饰符的意思是:
s
匹配所有字符,包括换行符
i
匹配无大小写(不区分大小写)
u
将模式字符串视为UTF-8(对于欧元符号)
我会使用这个正则表达式:
为了便于阅读,我将/
替换为#
正则表达式的部分解释:
\d
匹配数字(等于[0-9],略短)
[\.\,]
匹配
或,
作为十进制分隔符
*?
使*变为惰性,因此引擎首先尝试跳过前一项,然后再尝试与前一项不断增加的匹配项进行排列
\s?
匹配空格字符(?使其成为可选)
修饰符的意思是:
s
匹配所有字符,包括换行符
i
匹配无大小写(不区分大小写)
u
将模式字符串视为UTF-8(对于欧元符号)
它也可以是html特殊字符&euro
@MikeBell检查我对你的问题的评论。简言之:您的php脚本需要保存为UTF-8编码。如果有帮助,下面是我想要得到的:XXXX,XX€
啊哈!我在您的正则表达式中看到一个输入错误:
未找到,因为源代码包含,
作为十进制分隔符。相应地调整您的正则表达式,例如([0-9]+[\.\,]*[0-9]*)\p{Sc}
@DanielGimenez您的答案很好,我没有直接回复。我应该在我的评论中加上@MikeBell。它也可能是一个html特殊字符&euro
@MikeBell检查我对你的问题的评论。简言之:您的php脚本需要保存为UTF-8编码。如果有帮助,下面是我想要得到的:XXXX,XX€
啊哈!我在您的正则表达式中看到一个输入错误:
未找到,因为源代码包含,
作为十进制分隔符。相应地调整您的正则表达式,例如([0-9]+[\.\,]*[0-9]*)\p{Sc}
@DanielGimenez您的答案很好,我没有直接回复。我应该在我的评论中加上@MikeBell。你是否保存文件UTF-8编码(没有BOM)?IDE中应该有一个设置。只有使用正确的编码,才能正确保存纯欧元符号。否则使用&欧元代码>如建议的那样。顺便问一下:在您正在爬行的源中,空格是否出现在欧元符号之前?如果是,请在正则表达式中添加\s
。例如/(\d+\.*\d*)\s?[€]/siu
。是否保存UTF-8编码的文件(无BOM)?IDE中应该有一个设置。只有使用正确的编码,才能正确保存纯欧元符号。否则使用&欧元代码>如建议的那样。顺便问一下:在您正在爬行的源中,空格是否出现在欧元符号之前?如果是,请在正则表达式中添加\s
。例如,/(\d+\.*\d*)\s?[€]/siu
。如果模式中没有字母字符,他为什么要使用i
修饰符?如果euro€
符号已编码或类似&euro代码>它可能在源代码中的不同情况下,例如&Euro代码>或&欧元代码>。这就是我把它包括在内的原因。很公平,但是你的模式不寻找实体字符串,只寻找符号。(哦,实体是区分大小写的-Ö;
不同于Ö;
。我认为欧元符号必须都是小写的&Euro;
)@Spudley你说得对。我已经创建了一个与€版本。如果模式中没有字母字符,他为什么要使用i
修饰符?如果euro€
符号已编码或类似于&euro代码>它可能在源代码中的不同情况下,例如&Euro代码>或&欧元代码>。这就是我把它包括在内的原因。很公平,但是你的模式不寻找实体字符串,只寻找符号。(哦,实体是区分大小写的-Ö;
不同于Ö;
。我认为欧元符号必须都是小写的&Euro;
)@Spudley你说得对。我已经创建了一个与€版本