perl - 奇怪的正则表达式
问题描述
此正则表达式将精确匹配一行中的一个/
和一个.
。但是为什么会匹配呢?谁能清楚地向我解释这个正则表达式中每个字符的角色?
if ($fp =~ m{^[^/]*/[^/]*$} and $fp =~ m{^[^.]*.[^.]$})
{
print $fp;
}
解决方案
if($fp =~ m{^[^/]*/[^/]*$} and $fp =~ m{^[^.]*.[^.]$}) {
^\ / ^^\ / ^^
| | || | ||
------------- | || | ||
begin line | || | ||
--------------- || | ||
any char but / || | ||
------------------| | ||
zero or more | | ||
------------------ | ||
one / | ||
--------------------- ||
any char but / ||
------------------------|
zero or more |
------------------------|
end of line
所以它搜索
开始或行 (^),
后跟零次或多次出现 (*) 的任何字符,但 / ([^/])
后跟一个 /
后跟零次或多次出现 (*) 的任何字符,但 / ([^/])
后跟行尾 ($)
这 ”。” 搜索类似,如果两者都为真,则“if”触发。
请注意,[...]
在一个范围内搜索一个字符。例如[abc]
搜索“a”、“b”或“c”。如果第一个字符是 '^',则测试反转并且[^/]
是任何字符,但 '/'。
推荐阅读
- python - 熊猫面具、GroupBy 和 CumSum
- visual-c++ - Visual Studio 2017。LNK1104:一次成功构建后无法打开文件 ....\Debug\....exe
- javascript - JS & HTML - 我如何嵌入随机视频?
- python - 如何在文件夹内的每个图像上运行相同的代码?
- php - Ajax Dropdown 不返回结果
- c# - Visual Studio 2019 EDMX 缺少 ADO.NET 实体数据模型项模板
- ruby - 如果 0 索引值是满足条件的唯一值,则 Ruby 中的 Array#bsearch 返回 nil
- .htaccess - 用于 SSL 的 htaccess 301 指令
- c++ - 了解 XML CharData EBNF
- svelte - 制作刷新按钮以更新 store.js 中的 ajax 并触发 {#await} 承诺