在$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";
}
答案 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.*