Php 如何将复杂的ereg_替换转换为preg_替换?

Php 如何将复杂的ereg_替换转换为preg_替换?,php,posix-ere,Php,Posix Ere,我知道这方面有很多问题,但我没有发现任何与我的问题相匹配的东西。我想将此表达式转换为preg_replace: $a = ereg_replace('[-a-z0-9!#$%&\'*+/=?^_`{|}~]+@([.]?[a-zA-Z0-9_/-])*','', $a); 到目前为止,我们尝试了这些方法,但没有成功: $a = ereg_replace('/[-a-z0-9!#$%&\'*+/=?^_`{|}~]+@([.]?[a-zA-Z0-9_/-])*/','', $a)

我知道这方面有很多问题,但我没有发现任何与我的问题相匹配的东西。我想将此表达式转换为preg_replace:

$a = ereg_replace('[-a-z0-9!#$%&\'*+/=?^_`{|}~]+@([.]?[a-zA-Z0-9_/-])*','', $a);
到目前为止,我们尝试了这些方法,但没有成功:

$a = ereg_replace('/[-a-z0-9!#$%&\'*+/=?^_`{|}~]+@([.]?[a-zA-Z0-9_/-])*/','', $a);
$a = ereg_replace('|[-a-z0-9!#$%&\'*+/=?^_`{|}~]+@([.]?[a-zA-Z0-9_/-])*|','', $a);
以下是第二行的错误消息:

Warning: preg_replace(): Unknown modifier '}' in

对于分隔匹配字符串的字符,请使用不在匹配字符串中的内容,或转义字符串中分隔符的用法,如

$a = ereg_replace('/[-a-z0-9!#$%&\'*+\/=?^_`{|}~]+@([.]?[a-zA-Z0-9_\/-])*/','', $a);

这个例子很难理解;我会找到一个根本不用的字符。

尝试
preg_quote
在character类中填充内容。在第二个例子中,您在模式中使用分隔符而不引用它(就在
}
之前)转义分隔符。或者使用字符列表中没有的分隔符,例如
°
。如果所有其他操作都失败,则preg_match(“\001[…..]\001”始终是一种替代方法。