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; }
Ответ 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; }