我已经尝试了很长一段时间,但无济于事
我需要读取一个字符串并返回包含'@'的子字符串,例如, 有一个字符串像“andrew garfield邀请为andrew@gomail.com” 希望函数返回子字符串“andrew@gomail.com”
尝试使用explode,strpos和substr来找到@的位置,然后找到空格,然后爆炸,不能让它真正起作用 感谢您的帮助
答案 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);
如果您更喜欢正则表达式,则可以将一个或多个非空白符号与\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;