Я хотел бы вернуть строку между двумя символами, @ и точкой (.).
Я пытался использовать регулярное выражение, но не могу найти его работу.
(@(.*?).)
Кто-нибудь?
Ваше регулярное выражение почти работает, вы просто забыли избежать периода. Кроме того, в 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; }