在变量值之后抓取所有内容

时间:2018-06-14 12:50:51

标签: php

$contents中,我想在管道后抓住所有东西,例如boss

$search_for = "micky.mcgurk";
$contents = "micky.mcgurk@somewebsite.com|boss";
$pattern = sprintf('/\b%s@([^|\s]+)\|/m', preg_quote($search_for));

if (preg_match_all($pattern, $contents, $matches)) {
    $submitted_by = implode("\n", $matches[1]);
} else {
   echo "No user found";
}

4 个答案:

答案 0 :(得分:4)

$resultat = substr(strrchr($content, '|'), 1);

答案 1 :(得分:1)

为什么不使用爆炸?

$contents = "micky.mcgurk@somewebsite.com|boss";
$result = explode("|", $contents);
echo $result[1];

这要求,邮件地址和" |"之后的内容没有" |"还... ...)

答案 2 :(得分:1)

RegExp方式:

$pipe = preg_quote('|', '/');
$regExp = '/.*' . $pipe . '(.*)$/';

最快的方式:

$name = substr($string, strpos($string, '|') + 1);

答案 3 :(得分:1)

要回答当前正则表达式发生的事情:

([^|\s]+)

匹配每个连续的非|和空白字符。一旦遇到它停止。由于捕获的捕获组()

https://regex101.com/r/DVY3F0/2/

你想要的是直接在那之后。如果你添加:

\|\K.*

并删除您在0索引处想要的先前捕获组。

https://regex101.com/r/DVY3F0/3/

完整形式:

\bmicky\.mcgurk@[^|\s]+\|\K.*

或者您可以将其作为非|的模糊检查,直到|

[^|]+?\|\K.*

https://regex101.com/r/yvzdDu/1/