从包含@ php的字符串返回单词

时间:2016-10-19 07:13:35

标签: php string

我已经尝试了很长一段时间,但无济于事

我需要读取一个字符串并返回包含'@'的子字符串,例如, 有一个字符串像“andrew garfield邀请为andrew@gomail.com” 希望函数返回子字符串“andrew@gomail.com”

尝试使用explode,strpos和substr来找到@的位置,然后找到空格,然后爆炸,不能让它真正起作用 感谢您的帮助

4 个答案:

答案 0 :(得分:2)

获得所有此类子串的直接方法:

$s = "andrew garfield invited as andrew@gomail.com or man@ohman.com";
$ss = explode(" ", $s);
$res = array();
foreach($ss as $x) {
    if (strpos($x, "@") > -1) {
        array_push($res, $x);
    }
}
print_r($res);

查看online PHP demo

如果您更喜欢正则表达式,则可以将一个或多个非空白符号与\S+匹配,并使用\S+@\S+ regex提取非空白块+ @ +非空格(最小长度为3):

$s = "andrew garfield invited as andrew@gomail.com or man@ohman.com";
$res = array();
preg_match_all('~\S+@\S+~', $s, $res);
print_r($res);

在最后删除任何非单词char,在正则表达式的末尾添加\b。请参阅this PHP demo

注意:要从更长的字符串中抓取电子邮件,您可以使用Rob Locke在How to get email address from a long string SO帖子中描述的方法。

答案 1 :(得分:0)

我认为最好的解决方案是正则表达式。 这是PHP代码:

$re = '/(?<=\b)\w([\w\.\-_0-9])*(@| at )[\w0-9][\w\-_0-9]*((\.| DOT )[\w\-_0-9]+)+(?=\b)/mi';
$str = 'andrew garfield invited as andrew@gomail.com';

preg_match_all($re, $str, $matches);

// Print the entire match result
print_r($matches);

答案 2 :(得分:0)

#include<iostream>
using namespace std;

class Stack
{
public:
    int pop() {
        data = next->data;
        auto tmp = next;
        next = next->next;
        delete tmp;
        return data;
    }
    void push(int n) {
        Stack* p = new Stack();
        p->data = n;
        p->next = next;
        next = p;
        size++;
    }
    virtual ~Stack() {
        free();
    }
    void free() {
        while(next) pop();
    }
    Stack* next = nullptr;

protected:
    int data;
    int size = 0;
};
int main()
{
    Stack s;
    for(int i=0; i<30; i++) s.push(i);
}

答案 3 :(得分:0)

保持简单:)

$str = "andrew garfield invited as andrew@gomail.com";
$strArr = explode('@',$str);
$pieces = explode(' ', $strArr[0]);
$last_word = array_pop($pieces);
$email =  $last_word.'@'.$strArr[1];
echo $email;