Regex, получите строковое значение между двумя символами

Я хочу вернуть строку между двумя символами, @и точкой (.).

Я пытался использовать регулярное выражение, но не могу его найти.

(@(.*?).)

Кто-нибудь?

Ответы

Ответ 1

Ваше регулярное выражение почти работает, вы просто забыли избежать периода. Кроме того, в PHP вам нужны разделители:

'/@(.*?)\./s'

s - это модификатор DOTALL.

Вот полный пример того, как вы могли бы использовать его в PHP:

$s = '[email protected]';
$matches = array();
$t = preg_match('/@(.*?)\./s', $s, $matches);
print_r($matches[1]);

Вывод:

bar

Ответ 2

Попробуйте это регулярное выражение:

@([^.]*)\.

Выражение [^.]* будет соответствовать любому количеству символов, кроме точки. И простая точка должна быть экранирована как особый символ.

Ответ 3

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

@\K[^.]++(?=\.)

(?<[email protected])[^.]++(?=\.)

Оба эти регулярных выражения используют притяжательные кванторы (++). Используйте их, когда можете, чтобы избежать ненужного возврата. Кроме того, используя обратные конструкции (или \K), мы можем сопоставить часть между @ и . в $matches[0].

Ответ 4

это лучший и быстрый в использовании

function get_string_between ($str,$from,$to) {

    $string = substr($str, strpos($str, $from) + strlen($from));

    if (strstr ($string,$to,TRUE) != FALSE) {

        $string = strstr ($string,$to,TRUE);

    }

    return $string;

}