有谁知道如何匹配类似的东西
<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="afdbefdb81ccc0c2" rel="noreferrer noopener nofollow">[email protected]</a>>
我尝试了这个正则表达式
\<(.?*)\>
但这也匹配 <sddsds>
我希望它与 <>
内的位置匹配是一封电子邮件 @
标志。
最佳答案
你可以使用
<([^<>@]+@[^<>@]+)>
请参阅regex demo 。 详细信息:
-
<
- 一个<
字符 -
([^<>@]+@[^<>@]+)
- 第 1 组:除<
之外的任何一个或多个字符,>
和@
,一个@
char,然后再输入除<
之外的任何一个或多个字符,>
和@
-
>
- 一个>
字符。
请参阅PHP demo :
$str = "<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2e5a6e5a004d4143" rel="noreferrer noopener nofollow">[email protected]</a>>\n<tatacom>\n<t@ata@com>";
$re = '/<([^<>@]+@[^<>@]+)>/';
if (preg_match_all($re, $str, $matches)) {
print_r($matches[1]);
}
// => Array( [0] => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="96e2d6e2b8f5f9fb" rel="noreferrer noopener nofollow">[email protected]</a> )
关于php - 正则表达式提取尖括号之间的字符串,并且尖括号之间恰好有一个@字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68491467/