2013-07-26 3 views
2

У меня немного трудностей с этим, так что я надеюсь, что вы парни и девушки могут помочь, у меня есть несколько строк, как этоMatch строка, если подчеркивание встречается перед матчем

foo_bar.com     // no match 
[email protected] // match 
[email protected]_otherstuff // match 

Я использую это, но он не работает совсем, как я хочу это

[^_]+([email protected]).*

если подчеркивание встречается до того, как в I хотел бы, чтобы удалить @ и все, после этого, если подчеркивание не встречается, просто оставьте строку в покое

ответ

0

Для этого требуется два шага, сначала совпадение, а затем стирание.

if (preg_match("/_.*@/", $string)) 
    $string = preg_replace("/@.*$/", "", $string); 
0

В качестве альтернативы регулярного выражения, вы можете использовать основные функции строки:

$underscore = strpos($string, '_'); 
$at = strpos($string, '@'); 

if ($underscore !== false && $underscore < $at) { 
    $string = substr($string, 0, $at); 
} 
1

You для этого не нужны образы:

$result = preg_replace('/^([^[email protected]]*_[^@]*)@.+/', '$1', $subject); 
+0

Уже принято решение для работы, но плюс один для этого, не глядя вокруг, спасибо Алан, я не думал, что вы могли бы так сделать. – ehime