我对此有点困难,所以我希望你们女孩和男孩能帮忙,我有几个这样的字符串
foo_bar.com // no match
foo_bar.com@some.otherstuff // match
foo_bar.com@some_otherstuff // match
我正在使用它,但它并没有按照我想要的方式工作
[^_]+(?=@).*
如果在 at 之前遇到下划线,我想删除 @ 和之后的所有内容,如果没有遇到下划线,只需保留字符串
我对此有点困难,所以我希望你们女孩和男孩能帮忙,我有几个这样的字符串
foo_bar.com // no match
foo_bar.com@some.otherstuff // match
foo_bar.com@some_otherstuff // match
我正在使用它,但它并没有按照我想要的方式工作
[^_]+(?=@).*
如果在 at 之前遇到下划线,我想删除 @ 和之后的所有内容,如果没有遇到下划线,只需保留字符串
试试这个正则表达式:
preg_replace('/((?=_).*?)@.*/', '$1', $string);
输出:
* foo_bar.com => foo_bar.com
* foo_bar.com@some.otherstuff => foo_bar.com
foobar.com@some.otherstuff => foobar.com@some.otherstuff
You don't need lookarounds for that:
$result = preg_replace('/^([^_@]*_[^@]*)@.+/', '$1', $subject);
这需要两个步骤,首先匹配然后擦除。
if (preg_match("/_.*@/", $string))
$string = preg_replace("/@.*$/", "", $string);
作为正则表达式的替代方法,您可以使用基本的字符串函数:
$underscore = strpos($string, '_');
$at = strpos($string, '@');
if ($underscore !== false && $underscore < $at) {
$string = substr($string, 0, $at);
}