- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我能找到的关于 shExpMatch
函数的所有文档都很糟糕。例如:
我使用过很多 shell,以前从未见过用于描述模式匹配语言的短语“shell 表达式”。我不知道这是什么意思。从可用示例来看,它看起来类似于文件名通配模式。我想知道为什么他们不说“glob”、“通配符”或“文件名扩展”(这 3 个中的任何一个都是更标准、更容易识别的术语)如果那是他们的意思。相反,每个 vendor 都普遍使用未定义的短语“shell 表达式”——但仅用于描述此功能。如果我不了解的话,我会认为他们只是在不阅读的情况下复制彼此的文档。
如果我们接受“shell 表达式”意味着 glob,那么麻烦才刚刚开始。 哪个 shell? 不同的实现是否一致?我可以猜测这个函数是由一些 unix 程序员创造的,他们对 globs 的默认想法是 Bourne-shell-ish。但是 -ish 后缀有很多变体!基本特征是 *
和 ?
和 []
。 []
是否支持 [[:alnum:]]
之类的字符类或仅支持单个字符和范围?它是否支持像 [!a-z]
或 [^a-z]
这样的否定?所有的特殊字符都可以通过在它们前面加上反斜杠(包括反斜杠本身)来按字面匹配吗?还有其他类似 shell 的引用运算符吗? *
运算符真的像一个 glob,匹配目录层次结构的单个级别吗,所以 *
和 */*
是互斥的,还是它也匹配斜杠?它是否无法匹配前导点?是否存在来自 ksh
、bash
和 zsh
的任何扩展?甚至可能像 csh
一样的大括号扩展(这不是一个 glob 操作,但经常被误认为是一个操作)?
另一方面,也许它是由面向Microsoft的人设计的,以支持Windows用户,所以我应该更像COMMAND.COM通配符。 Microsoft 会使用一种外国模式匹配语言,而不是明确记录这种语言吗?
是否有我忽略的权威来源实际指定了匹配规则?如果做不到这一点,是否有人足够详细地研究了当前的实现以确定规则的实际内容?
最佳答案
这是 Mozilla 使用的 shExpMatch()
的实现:
function shExpMatch(url, pattern) {
pattern = pattern.replace(/\./g, '\\.');
pattern = pattern.replace(/\*/g, '.*');
pattern = pattern.replace(/\?/g, '.');
var newRe = new RegExp('^'+pattern+'$');
return newRe.test(url);
}
( Source )
就像你说的来自 Netscape 的原始文档是 here现在搬到了here . (Source)。
据我所知,这些 proxy.pac 的一些实现不支持完全成熟的 JScript或 JavaScript但只有ECMAScript .我还看到了不使用这些方法而是使用字符串操作的 proxy.pac 文件:
function FindProxyForURL(url,host)
{
if (host.substring(0, 4) == "192." ||
host.substring(0, 7) == "example" )
{
return "DIRECT";
}
}
所以看起来真的没有默认标准。对于 Windows,我现在使用像 WinHttpGetProxyForUrl
这样的 WinApi 调用.至少我的实现不会与我的操作系统不同。
希望对您有所帮助 ;)
关于javascript - shExpMatch 到底做什么样的匹配呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362748/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!