I'd like to return string between two characters, @ and dot (.).
(@(.*?).)
Your regular expression almost works, you just forgot to escape the period. Also, in PHP you need delimiters:
'/@(.*?)\./s'
The s is the DOTALL modifier .
Here's a complete example of how you could use it in PHP:
$s = 'foo@bar.baz';
$matches = array();
$t = preg_match('/@(.*?)\./s', $s, $matches);
print_r($matches[1]);
Output:
bar
Try this regular expression:
@([^.]*)\.
The expression [^.]*
will match any number of any character other than the dot. And the plain dot needs to be escaped as it's a special character.
this is the best and fast to use
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;
}
If you're learning regex, you may want to analyse those too:
@\K[^.]++(?=\.)
(?<=@)[^.]++(?=\.)
Both these regular expressions use possessive quantifiers ( ++
). Use them whenever you can, to prevent needless backtracking. Also, by using lookaround constructions (or \\K
), we can match the part between the @
and the .
in $matches[0]
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.