Regex, получить строковое значение между двумя символами - PullRequest
16 голосов
/ 09 января 2010

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

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

(@(.*?).)

Кто-нибудь? * * 1006

Ответы [ 4 ]

32 голосов
/ 09 января 2010

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

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

Это модификатор DOTALL .

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

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

Выход:

bar
11 голосов
/ 09 января 2010

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

@([^.]*)\.

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

2 голосов
/ 08 декабря 2015

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

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;

}
2 голосов
/ 10 января 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...