1

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

任何帮助将不胜感激,即使它只是告诉我放弃,不可能。提前致谢!

4

3 回答 3

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>'
于 2013-02-06T22:21:05.740 回答
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修饰符,模式匹配多行,其中$( 在模式的末尾) 匹配一行的末尾。这样就可以从右到左匹配每一行并删除数量,并且只删除其中的最后一个-

于 2013-02-06T22:24:33.187 回答
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

于 2013-02-06T22:51:17.420 回答