我真的不擅长正则表达式,我有:
/(@[A-Za-z-]+)/
它会在文本框中的 @ 符号之后找到单词,但是我需要它来忽略电子邮件地址,例如:
foo@things.com
但是它找到了@things
我还需要它包含数字,例如:
@He2foo
但是它只找到@He 部分。
感谢您的帮助,如果您想用简单的术语解释正则表达式,那就太好了:D
/(?:^|(?<=\s))@([A-Za-z0-9]+)(?=[.?]?\s)/
@This
(匹配)正则表达式ignores@this
,但匹配@separate
标记以及句子末尾的标记,如@this.
or @this?
(不选择.
or ?
)并且 yesemail@addresses.com
也被忽略。
匹配时的正则表达式还可以让您通过拿起正则表达式来@
快速访问它之后的内容(如userid
in ) 。查看 PHP 文档以了解如何使用正则表达式组。@userid
group(1)
您可以将 0-9 添加到您的正则表达式中,如下所示:
/(@[A-Za-z0-9-]+)/
不要认为需要任何更多的解释,因为您已经能够自己走到这一步。0-9
就像a-z
(当然是数字)。
为了忽略电子邮件地址,您需要提供更具体的要求。您可以尝试@
使用(^| )
which 基本上说明您的值必须以字符串的开头(所以实际上没有,尽管在开头)或空格开头。
扩展它,您还可以($| )
在末尾使用以要求值后跟字符串或空格的结尾(这意味着不允许使用句点,这是有效电子邮件地址的要求)。
更新
$subject = "@a @b a@b a@ @b";
preg_match_all("/(^| )@[A-Za-z0-9-]+/", $subject, $matches);
print_r($matches[0]);