我有一定的困難,這個以前也遇到過底線,所以我希望你女孩和球員,可以幫幫忙,我有幾串這樣匹配字符串匹配,如果
foo_bar.com // no match
[email protected] // match
[email protected]_otherstuff // match
我使用這個,但它並不完全工作,我怎麼想它
[^_]+([email protected]).*
如果下劃線遇到之前在我想刪除@一切之後,如果沒有遇到下劃線,見好就收字符串獨自
我有一定的困難,這個以前也遇到過底線,所以我希望你女孩和球員,可以幫幫忙,我有幾串這樣匹配字符串匹配,如果
foo_bar.com // no match
[email protected] // match
[email protected]_otherstuff // match
我使用這個,但它並不完全工作,我怎麼想它
[^_]+([email protected]).*
如果下劃線遇到之前在我想刪除@一切之後,如果沒有遇到下劃線,見好就收字符串獨自
試試這個正則表達式:
preg_replace('/((?=_).*?)@.*/', '$1', $string);
輸出:
* foo_bar.com => foo_bar.com
* [email protected] => foo_bar.com
[email protected] => [email protected]
這需要兩個步驟,首先匹配然後擦除。
if (preg_match("/_.*@/", $string))
$string = preg_replace("/@.*$/", "", $string);
作爲替代正則表達式,你可以使用基本的字符串函數:
$underscore = strpos($string, '_');
$at = strpos($string, '@');
if ($underscore !== false && $underscore < $at) {
$string = substr($string, 0, $at);
}
你不需要如下的代碼:
$result = preg_replace('/^([^[email protected]]*_[^@]*)@.+/', '$1', $subject);
已經接受了一個工作解決方案,但再加上一個沒有環顧四周,謝謝艾倫,我不認爲你可以這樣做。 – ehime
非常好!接受和加1爲您的煩惱爵士 – ehime