Php Regex@symbol及其使用方法';过去的
如果有人在某个地方回答了这个问题,我很抱歉我找不到。这是来自preg_match的php参考Php Regex@symbol及其使用方法';过去的,php,regex,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('/[^.]+\.[^.]+$
<?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
是一个开关,表示正则表达式不区分大小写
任何非字母数字字符都可以用作分隔符。作者之所以选择@
分隔符而不是更标准的/
,是为了不必转义正则表达式中的斜杠
您的正则表达式等价于以下内容:
'/^(?:http:\/\/)?([^\/]+)/i'
@
作为分隔符在这里就是这样。@^
或@i
没有什么特别之处。符号@
、^
和i
都是分开的,表示:
{}
的组合)正在使用
@
代替更常见的/
,因为在模式中使用了/
。它只允许模式更具可读性,而无需转义
想象一下(相同的模式):
正如其他人所提到的,
i
,使得模式CasE没有意义。谢谢,这很有意义。感谢快速的回答。
@^(?:http://)?([^/]+)@i
/^(?:http:\/\/)?(^\/]+)/i