您好我在PHP中有以下代码:
$str1 = "A charge of
<b>$3.03</b>
including fees of
<b>$1.03</b>
and
<b>$1.00</b>
on 02/17/2017";
$message = '<p><b>Your payment will be scheduled as below:</b></p><p id=\'firstPaymentCC\'>A charge of <b id=\'firstPaymentCCB\'>$2.03</b> including a fee of <b>$1.03</b> on 02/17/2017</p><p>A charge of <b id=\'firstPaymentCCB\'>$2.03</b> including a fee of <b>$1.03</b> on 02/24/2017</p><p>A charge of <b id=\'firstPaymentCCB\'>$2.03</b> including a fee of <b>$1.03</b> on 03/03/2017</p><p>A charge of <b id=\'firstPaymentCCB\'>$2.03</b> including a fee of <b>$1.03</b> on 03/10/2017</p>';
echo preg_replace("/<p id='firstPaymentCC'>[\s\S]+?<\/p>/", $str1, $message);
我想要做的是在变量<p id='firstPaymentCC'> and </p>
中的2个分隔符$message
之间提取文本,并将其替换为变量$str1
的内容。
我得到的结果是:您的付款方式如下: 收费.03,包括2017年2月17日的.03和.00费用
2017年2月24日收取2.03美元的费用,包括1.03美元的费用
2017年3月3日收取2.03美元的费用,包括1.03美元的费用
2017年10月3日收取2.03美元的费用,包括1.03美元的费用
为什么有.03和.00,而它应该是1.03美元和1.00美元?
感谢。
答案 0 :(得分:1)
$str1
包含替换模式。
在替换模式中,$
+数字定义反向引用。
如果您不想定义反向引用,请转义美元符号:
$str1 = "A charge of
<b>\\\$3.03</b>
including fees of
<b>\\\$1.03</b>
and
<b>\\\$1.00</b>
on 02/17/2017";
注意:由于字符串是用双引号字符串文字定义的,要定义$
符号,需要对其进行转义("\$"
),并定义一个文字反斜杠(将逃避文字美元符号)需要两个反斜杠("\\"
)。详细了解PHP string literals here。
答案 1 :(得分:-1)
$引用模式中使用的括号对的匹配内容 - $ 1匹配第一组,$ 2匹配第二组等。
你可以像这样使用它:
echo preg_replace('/([0-9]+):([0-9]+)/','$1 hours and $2 mins','12:23');
这将输出:12 hours and 23 mins
如果您只想用实际的美元符号替换 - 您必须使用斜杠进行转义:
$str1 = "A charge of
<b>\\$3.03</b>
including fees of
<b>\\$1.03</b>
and
<b>\\$1.00</b>
on 02/17/2017";
请注意,您必须使用双斜杠。
这里有一些更有用的信息:http://www.regular-expressions.info/brackets.html