regex - 对干净的 URL 使用 IIS 重写:匹配“^”或“.*”之间有什么区别?
问题描述
我正在 IIS (v10.0) 配置文件中创建重写规则,以通过捕获所有传入请求并将与系统中的物理目录或文件不明确匹配的任何内容路由到单点处理。目前的规则如下所示:
<rule name="Absorbifier" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
我发现了几个编写类似规则的好例子,我见过的用于捕获所有请求的最流行的正则表达式模式是这两个:
^
(从任何字符串的开头匹配).*
(匹配 0 个或多个除换行符以外的任何字符)
我已经测试了这些模式中的每一个,但还没有看到它们的表现有什么不同。在我正在编写的规则的上下文中,这些结果在功能上是否等效?还是其中之一更擅长捕捉难以预测的边缘情况?
解决方案
在这种情况下,两者的含义相同:
- 正则表达式
^
表示字符串的开头,并且是匹配项,即使对于空字符串也是如此。 - 正则表达式
.*
表示直到下一个换行符的所有内容,并且是匹配项,即使对于空字符串也是如此。
推荐阅读
- python - 使用 pyserial 模块从 PC 到 BLE 设备的多个串口转换问题
- java - OFBiz 中定义的 DataResource 实体在哪里?
- python - 如何用硒填充文本框?
- amazon-web-services - 使用 Terraform 创建/销毁 AWS 账户?
- android - Android Studio HAXM 安装程序错误
- mysql - 如何在 Yii2 中使用 mysql 查询优化器提示?
- c++ - 尝试在媒体基础视频播放器上设置圆形区域时窗口性能不佳
- c - 如何在 C 中使用正则表达式验证字符串时添加 if 语句
- apple-push-notifications - iPad 上的 Microsoft Edge 是否支持推送通知?
- sql - 试图弄清楚为什么 NewID 函数停止在 Oracle 上工作