Php正则表达式 - 删除$和换行符之间的任何内容但保留中断

时间:2013-02-06 22:19:32

标签: php regex preg-replace

好的,我有一个生成如下字符串的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>"

任何帮助都会非常感激,即使只是告诉我放弃,也不可能。提前谢谢!

3 个答案:

答案 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}/':

测试它: http://phpfiddle.org/main/code/auw-gb4