什么是正则表达式来捕获包含@符号的任何字符串?

时间:2011-10-29 22:59:15

标签: regex

什么是正则表达式来捕获包含@符号的任何字符串?

例如,如果你有字符串......

Hey let's meet-up @5pm tonight.  E-mail me at joe@example.com.  What the !>?@## is your problem?

......将返回以下内容:

@5pm 
joe@example.com. 
!>?@##

3 个答案:

答案 0 :(得分:2)

我不会为你写正则表达式,但想一想:

  • 隔离单词,即由空格终止的非空格字符序列(特殊情况是第一个和最后一个单词)。
  • 现在包含'@'=非空格* @非空格*
  • 的单词
  • 在包含@
  • 的字词之间允许包含零个或多个单词

现在你应该能够用自己喜欢的语法写一个正则表达式了......

答案 1 :(得分:1)

preg_match_all 会做您想做的事。

\ S - 匹配任何不是空白字符的字符(空格,制表符,换行符)。

$subject = 'Hey let's meet-up @5pm tonight.  E-mail me at joe@example.com.  What the !>?@## is your problem?'

$matches = array();
if (preg_match_all('/\S*@\S*/', $subject, $matches)) {
    var_export($matches);
}

输出:

array (
  0 =>
  array (
    0 => '@5pm',
    1 => 'joe@example.com.',
    2 => '!>?@##',
  ),
)

答案 2 :(得分:1)

这是正则表达式:

\S*@\S*

使用JavaScript快速测试:

var text = "Hey let's meet-up @5pm tonight.  E-mail me at joe@example.com.  What the !>?@## is your problem?"
var re = /\S*@\S*/g
var matches = []
var match
while (match = re.exec(text)) matches.push(match[0])

console.log(matches) // ["@5pm", "joe@example.com.", "!>?@##"]

用你使用的任何一种语言写一些类似的东西应该不难。