好的,我有一个生成如下字符串的php循环:
$string = "1st fee - $500.00<BR>
2nd fee - $500.00<BR>
3rd fee - $750.00<BR>"
我想取消美元金额,但我不确定它是否可能。我一直在尝试使用preg_replace删除$
和<
之间的所有内容,包括$
但不包括<
以获取类似内容:
$string = "1st fee - <BR>
2nd fee - <BR>
3rd fee - <BR>"
对我来说不幸的是,我必须离开-
,因为有时会在一行上有多个-
实例,如下所示:
$string = "1st fee - Brian - $500.00<BR>
2nd fee - John - $500.00<BR>
3rd fee - Bob - $750.00<BR>"
任何帮助都会非常感激,即使只是告诉我放弃,也不可能。提前谢谢!
答案 0 :(得分:1)
所以基本上你只想匹配- $
中的每一个,直到<br>
中的第一个左箭头。模式- \\$
的第一部分(需要转义$,因为这是一个正则表达式关键字)将匹配您要删除的内容的开头部分,然后[^<]*
将获取所有内容,直到找到左边箭头。
$string = "1st fee - Brian - $500.00<BR>
2nd fee - John - $500.00<BR>
3rd fee - Bob - $750.00<BR>";
$replaced = preg_replace("# - \\$[^<]*#", "", $string);
输出:
string '1st fee - Brian<BR>
2nd fee - John<BR>
3rd fee - Bob<BR>'
答案 1 :(得分:0)
您可以使用以下示例删除金额和最后一个 -
<?php
$string = "1st fee - $500.00<BR>
2nd fee - $500.00<BR>
3rd fee - Bob - $750.00<BR>";
$pattern = '/\- \$[0-9]+\.[0-9]+\<BR>$/m';
echo preg_replace($pattern, '', $string);
请注意,由于/m
修饰符,模式匹配多行,其中$
(在模式的末尾)与行的末尾匹配。这样就可以匹配从右到左的每一行,并删除金额,只删除其中的最后一个-
。
答案 2 :(得分:0)
我认为你应该使用完整的格式。 您想要替换金额,因此您应该使用与金额相对应的正则表达式。
$reg = '/ - \$[0-9]+\.[0-9]{2}/';
$withoutAmount = preg_replace($reg, '', $string);
您可以使用其他货币改进正则表达式:
$reg = '/ - (\$|£|€)[0-9]+\.[0-9]{2}/':