Php eregi#u replace(“[\]”,';';';,$data)--此行的作用是什么?

Php eregi#u replace(“[\]”,';';';,$data)--此行的作用是什么?,php,regex,Php,Regex,在最新的phpmailer示例文件中,有以下行: $body = eregi_replace("[\]",'',$body); 由于我对正则表达式不是很在行,所以我无法理解上面的内容是什么,以及在编写自己的数据块($body)时是否需要使用它。有人能帮我弄清楚吗 编辑 我真的复制得很好。以下是原始phpmailer示例文件中的一整段代码,完全没有涉及: require_once('../class.phpmailer.php'); $mail = new PHPMai

在最新的phpmailer示例文件中,有以下行:

$body = eregi_replace("[\]",'',$body);
由于我对正则表达式不是很在行,所以我无法理解上面的内容是什么,以及在编写自己的数据块(
$body
)时是否需要使用它。有人能帮我弄清楚吗

编辑

我真的复制得很好。以下是原始phpmailer示例文件中的一整段代码,完全没有涉及:

require_once('../class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"

$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);

$mail->AddReplyTo("name@yourdomain.com","First Last");

$mail->SetFrom('name@yourdomain.com', 'First Last');

“[\]”
表示您正在转义指向左侧的标记
]

该代码正在删除
$body
中的所有反斜杠

虽然乍一看可能有点奇怪,但正则表达式是正确的。当反斜杠位于POSIX正则表达式的括号内时,它不是元字符

尽管如此,这段代码还是有各种各样的问题,特别是因为它应该是一个示例:

  • 它使用一个不推荐使用的regex函数族
    ereg
    (或POSIX)。最近一半的PHP示例应该都使用
    preg
    (Perl兼容)系列
  • 它使用不区分大小写的匹配(在
    eregi
    中的
    i
    ),尽管它不匹配任何字母,因此大小写是无关的
  • 最重要的是,更换的实际目的尚不清楚。我只能猜测,这是一种误导性的尝试,试图解释PHP的特性,该特性会自动在各种事情上添加反斜杠

    要明确的是,此代码不是处理神奇引号的正确方法,因为它将删除
    $body
    中的所有反斜杠,甚至是原始输入中的“真实”反斜杠。该功能正是针对这个用例设计的。或者,由于本例处理的是从文件中读取,因此您可以简单地执行以下操作


该代码删除了所有的后斜杠

只要试一下代码

我不知道为什么选择了
eregi
,因为它和它的兄弟已经被弃用了。最好使用

请注意,
eregi_replace()
preg_replace()
有不同的使用规则。前者使用POSIX正则表达式扩展,而后者使用PCRE函数。下面是一个例子,如果假设
preg\u replace()
语法,那么理解代码就很困难

这些都做了同样的事情:

eregi_replace("[\]",'',$body);  \\ Remove backslashes with POSIX regexes

preg_replace("[\\\]",'',$body);   \\ Remove backslashes with PCRE regexes
preg_replace("/[\\\]/",'',$body); \\ Ditto
preg_replace("/\\\/",'',$body);   \\ Ditto
preg_replace("*\\\*",'',$body);   \\ Ditto

.

是的,直接从他们的文件中复制,根本没有触及它。@mario:没有,因为反斜杠在]@genesis-φ:
eregi
使用POSIX正则表达式语法,这恰好允许这种边缘大小写。你的回答没有意义。那么左括号呢?是不是也需要转义呢?我是这样的,括号是相框的。