正则表达式@符号及其使用方式

时间:2013-01-29 01:40:17

标签: php regex

如果在某处我得到了回答,我道歉,我找不到它。这取自preg_match的php参考。

<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];

// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>

我理解除了@ ^和@i之外的所有这些。我已经搜索了大量的正则表达式引用,除了作为分隔符之外没有看到@符号的任何提及,这不是这里的情况。

谢谢

3 个答案:

答案 0 :(得分:5)

正在使用

@代替更常见的/,因为在模式中使用了/。它只是允许模式更易读,而不必逃避它。

图片如下(相同模式):

@^(?:http://)?([^/]+)@i
/^(?:http:\/\/)?(^\/]+)/i

正如其他人所提到的那样i使得模式CasE InsEnSAtive。

答案 1 :(得分:3)

@ 此处是分隔符。第一个^之后的@表示匹配应该从字符串的开头开始,而i之后是一个开关,表示正则表达式不区分大小写。< / p>

任何非字母数字字符都可以用作分隔符。作者选择@分隔符而不是更标准/的原因是,正则表达式中的斜杠不必被转义。


你的正则表达式等同于以下内容:

'/^(?:http:\/\/)?([^\/]+)/i'

答案 2 :(得分:1)

@作为分隔符 就是这里的情况。 @^@i没有什么特别之处。符号@^i都是独立的,并表示:

  1. 正则表达式分隔符(可以是任何其他非字母数字字符或{}的组合)
  2. 行的开头
  3. 不区分大小写的修饰符