1

我真的不擅长正则表达式,我有:

    /(@[A-Za-z-]+)/

它会在文本框中的 @ 符号之后找到单词,但是我需要它来忽略电子邮件地址,例如:

    foo@things.com

但是它找到了@things

我还需要它包含数字,例如:

    @He2foo

但是它只找到@He 部分。

感谢您的帮助,如果您想用简单的术语解释正则表达式,那就太好了:D

4

2 回答 2

1
/(?:^|(?<=\s))@([A-Za-z0-9]+)(?=[.?]?\s)/

@This(匹配)正则表达式ignores@this,但匹配@separate标记以及句子末尾的标记,如@this.or @this?(不选择.or ?)并且 yesemail@addresses.com也被忽略。

匹配时的正则表达式还可以让您通过拿起正则表达式来@快速访问它之后的内容(如useridin ) 。查看 PHP 文档以了解如何使用正则表达式组。@useridgroup(1)

于 2013-05-15T14:34:01.397 回答
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]);
于 2013-05-15T14:07:32.887 回答