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

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

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

(@(.*?).) 

Кто-нибудь?

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

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

S – модификатор DOTALL .

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

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

Вывод:

 bar 

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

 @([^.]*)\. 

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

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

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

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

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

 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; }