鉴于以下示例,我想获取电子邮件地址
Eg. 1: some standard text. Bugs Bunny bugs@gmail.com 0411111111 more standard text
Eg. 2: some standard text. Bugs The Bunny bugs@gmail.com 0411111111 more standard text
Eg. 3: some standard text. Bugs-Bunny bugs.bunny@gmail.com 0411111111 more standard text
Eg. 4: some standard text. Bugs bugs.bunny@gmail.com +6141 111 111 more standard text
Eg. 5: some standard text. Bugs o'Bunny bugs@gmail.com 0411111111 more standard text
这样做:(?<=some standard text. )(?:.*?)([^\s]+@[^\s]+)
https://regex101.com/r/A29hjE/9
但是电子邮件地址在第1组中。我需要将它作为第0组或完全匹配,因为这个正则表达式将由某些代码动态创建,其中所有其他正则表达式都会产生完全匹配的结果。
我对群组了解不多,但我知道我需要在some standard text.
位之后的第一个电子邮件地址,就像我说的那样,它需要完全匹配。
答案 0 :(得分:1)
你可以这样做:
$lines = array(
"some standard text. Bugs Bunny bugs@gmail.com 0411111111 more standard text ",
"some standard text. Bugs The Bunny bugs@gmail.com 0411111111 more standard text",
"some standard text. Bugs-Bunny bugs.bunny@gmail.com 0411111111 more standard text",
"some standard text. Bugs bugs.bunny@gmail.com +6141 111 111 more standard text",
"some standard text. Bugs o'Bunny bugs@gmail.com 0411111111 more standard text ",
);
foreach($lines as $line) {
preg_match('/some standard text..+?\K\S+@\S+/', $line, $m);
var_dump($m);
}
其中:
\K
意味着忘记我们遇到的所有事情。\S
代表任何非空格,与[^\s]
然后我们只有$m[0]
<强>输出:强>
array(1) {
[0]=>
string(14) "bugs@gmail.com"
}
array(1) {
[0]=>
string(14) "bugs@gmail.com"
}
array(1) {
[0]=>
string(20) "bugs.bunny@gmail.com"
}
array(1) {
[0]=>
string(20) "bugs.bunny@gmail.com"
}
array(1) {
[0]=>
string(14) "bugs@gmail.com"
}
答案 1 :(得分:0)
如果您将正则表达式更改为([^ \ s] + @ [^ \ s] +),则完整结果应该只是电子邮件地址。
答案 2 :(得分:0)
组0 完全匹配。
如果您将正则表达式更改为[^\s]+@[^\s]+
,那么它将与您所有示例中的电子邮件地址相匹配。 https://regex101.com/r/SQL9Ul/1
由于名称的长度不同,您不能使用正面的后视,并将电子邮件地址与整个匹配项匹配。