简单的正则表达式 - 查找包含数字的单词但仅偶尔发现

时间:2013-05-15 14:05:53

标签: regex numbers symbols words

我在正则表达式上非常糟糕,我有:

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

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

    foo@things.com

然而它找到@things

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

    @He2foo

然而它只找到了@He部分。

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

2 个答案:

答案 0 :(得分:1)

您可以在正则表达式中添加0-9,如下所示:

/(@[A-Za-z0-9-]+)/

不要以为需要更多的解释,因为你已经能够自己走到这一步。 0-9就像a-z(虽然是数字的)。

为了忽略电子邮件地址,您需要提供更具体的要求。您可以尝试在@之前使用(^| ),这基本上表明您的值必须在字符串的开头之前(所以没有真正的,但在开始时)或空格。

扩展这个你也可以在末尾使用($| )来要求值后面跟着字符串的末尾或空格(这意味着没有允许的句号,这是有效的电子邮件地址的要求)。

<强>更新

$subject = "@a @b a@b a@ @b";
preg_match_all("/(^| )@[A-Za-z0-9-]+/", $subject, $matches);
print_r($matches[0]);

答案 1 :(得分:1)

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

@This(匹配)正则表达式ignores@this但匹配@separate代币以及句子末尾的代币,例如@this.@this?(无选择.?)和email@addresses.com也会被忽略。

匹配@时的正则表达式还可让您通过提取正则表达式userid快速访问其后的内容(如@userid中的group(1))。查看有关如何使用正则表达式组的PHP文档。