我在正则表达式上非常糟糕,我有:
/(@[A-Za-z-]+)/
在文本框中找到@符号后面的单词,但是我需要它来忽略电子邮件地址,例如:
foo@things.com
然而它找到@things
我还需要它包含数字,例如:
@He2foo
然而它只找到了@He部分。
非常感谢帮助,如果您想用简单的术语解释正则表达式,那就太棒了:D
答案 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文档。