正则表达式,获取两个字符之间的字符串值

时间:2010-01-09 19:47:50

标签: php regex

我想在两个字符之间返回字符串,@和点(。)。

我尝试使用正则表达式但无法找到它。

(@(.*?).)

任何人

4 个答案:

答案 0 :(得分:32)

你的正则表达式几乎有效,你只是忘了逃避这个时期。此外,在PHP中,您需要分隔符:

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

s是DOTALL modifier

以下是如何在PHP中使用它的完整示例:

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

输出:

bar

答案 1 :(得分:11)

试试这个正则表达式:

@([^.]*)\.

表达式[^.]*将匹配除点之外的任何数字。普通的点需要被转义,因为它是一个特殊的角色。

答案 2 :(得分:2)

如果您正在学习正则表达式,您可能也想分析它们:

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

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

这两个正则表达式都使用占有量词(++)。尽可能使用它们,以防止不必要的回溯。此外,通过使用外观构造(或\K),我们可以匹配@.$matches[0]之间的部分。

答案 3 :(得分:2)

这是最好和最快的使用

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;

}