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