$patterns = array();
$patterns[0] = "/[^@\s]*@[^@\s]*\.[^@\s]*/"; //removes email
$patterns[1] = "/[a-zA-Z]*[:\/\/]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-
_]+/i"; //removes any link
$replace = "[removed]";
$string = "Follow the link below https://stackoverlow.com/testing/preg-
match-replace-in-php or email me a sample code in my email
test@mail.com";
preg_replace($pattern,s $replacement, $string);
在这种情况下,如果您希望在删除链接或电子邮件时使用不同的替换文本(例如,在删除邮件时指定[email has been removed]和[link has been removed]),则可以在$replacement上扩展以上代码段,如下所示
$replacements = array();
//replacementmessage for mails
$replacements[0] = "[Email has been removed]";
//replacementmessage for links
$replacements[1] = "[Link has been removed]";
7条答案
按热度按时间jm81lzqq1#
你可以使用preg_replace来实现。
电子邮件:
对于URL:
资源
PHP手册条目:http://php.net/manual/en/function.preg-replace.php
信用证到期时的信用证:email regex取自preg_match手册页,URL regex取自:http://www.weberdev.com/get_example-4227.html
8xiog9wr2#
试试这个:
注意:你可以将一个模式和匹配的数组传递给preg_replace,而不是运行两次。
2sbarzqh3#
我本来要投赞成票的答案被删除了。它链接到Linux Journal的一篇文章Validate an E-Mail Address with PHP, the Right Way,该文章指出了几乎所有人提出的电子邮件正则表达式的问题。
电子邮件地址的有效形式的范围比大多数人想象的要广泛得多。
nimxete24#
我的答案是Josiah的
/[^@\s]*@[^@\s]*\.[^@\s]*/
的电子邮件的变体,它工作正常,但也匹配电子邮件地址本身之后的任何波动:demo 1如下修改正则表达式
/[^@\s]*@[^@\s\.]*\.[^@\s\.,!?]*/
以排除.
,
!
和?
:demo 2k75qkfdt5#
电子邮件模式(10 x to @bromelio)
URL的模式
lnxxn5zx6#
在电子邮件的第一个本地部分有很多有效字符(参见What characters are allowed in an email address?),因此这些行将替换所有有效的电子邮件地址:
这将涵盖大多数有效的电子邮件地址,请注意:删除真正的只有所有有效的电子邮件地址是有点复杂(见How can I validate an email address using a regular expression?)
fd3cxomn7#
我的答案是
Josiah's code
的一个小改进。只想将两个代码段合并为一个preg_replace()
,允许模式可以作为string
或array
传递。在这种情况下,如果您希望在删除链接或电子邮件时使用不同的替换文本(例如,在删除邮件时指定
[email has been removed]
和[link has been removed]
),则可以在$replacement
上扩展以上代码段,如下所示代码的其他部分保持不变。