1

同じ問題で多くの質問があることを知っています。それらを読みましたが、コードを修正できませんでした。

<?
$tabla = "<table>
<tr>
<td>
<a class='texto'>$ 2,123.01</a>
</td>
<td>
asddasdsad$,.$$$
</td>
</tr>
</table>";
echo preg_replace("<a class='texto'>\$ ([0-9]*),([0-9]*).([0-9]*)</a>", "<a class='texto'>$0$1,$2</a>", $tabla);

?>

PHP エラー: 警告: preg_replace() [function.preg-replace]: 不明な修飾子 '$'

私は取得したい:

<?
<table>
<tr>
<td>
<a class='texto'>2123,01</a>
</td>
<td>
asddasdsad$,.$$$
</td>
</tr>
</table>
?>

ここで正規表現を試してテストしましたhttp://regexpal.com/ 動作しました。しかし、preg_replace に問題があります。

4

2 に答える 2

3

次の 3 つの間違いがあります。

  1. 二重引用符内の \$ は、正規表現によって行末に一致するものとして扱われる $ だけを意味します
  2. パターン区切り文字を忘れました
  3. $0 は文字列全体を参照します。括弧内の式は、$1、$2 などと呼ばれます。

echo preg_replace("|<a class='texto'>\\\$ ([0-9]*),([0-9]*).([0-9]*)</a>|", "<a class='texto'>$1$2,$3</a>", $tabla);
于 2013-09-24T02:51:10.307 に答える
1

正規表現には、実際の表現の前後に区切り文字が必要です

<a class='texto'>\$ ([0-9]*),([0-9]*).([0-9]*)</a>

次のようにする必要があります。

/<a class='texto'>\$ ([0-9]*),([0-9]*).([0-9]*)<\/a>/

/式に含まれる可能性のある他のものをエスケープします

または、式に含まれていない別の区切り文字を使用します

#<a class='texto'>\$ ([0-9]*),([0-9]*).([0-9]*)</a>#

List of acceptable delimiters

于 2013-09-24T02:49:22.840 に答える