如果在某处我得到了回答,我道歉,我找不到它。这取自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之外的所有这些。我已经搜索了大量的正则表达式引用,除了作为分隔符之外没有看到@符号的任何提及,这不是这里的情况。
谢谢
答案 0 :(得分:5)
@
代替更常见的/
,因为在模式中使用了/
。它只是允许模式更易读,而不必逃避它。
图片如下(相同模式):
@^(?:http://)?([^/]+)@i
/^(?:http:\/\/)?(^\/]+)/i
正如其他人所提到的那样i
使得模式CasE InsEnSAtive。
答案 1 :(得分:3)
@
此处是分隔符。第一个^
之后的@
表示匹配应该从字符串的开头开始,而i
之后是一个开关,表示正则表达式不区分大小写。< / p>
任何非字母数字字符都可以用作分隔符。作者选择@
分隔符而不是更标准/
的原因是,正则表达式中的斜杠不必被转义。
你的正则表达式等同于以下内容:
'/^(?:http:\/\/)?([^\/]+)/i'
答案 2 :(得分:1)
@
作为分隔符 就是这里的情况。 @^
或@i
没有什么特别之处。符号@
,^
和i
都是独立的,并表示:
{}
的组合)