Google Code Search 允许您使用正则表达式进行搜索。
据我所知,没有类似的搜索引擎适用于一般搜索。
正则表达式在现实场景中的应用存在一些问题。其中最紧迫的问题是,您的正则表达式需要与整个缓存的互联网进行匹配,这将消耗大量的计算资源;由于正则表达式可能是无限制的(/fo*bar/),所以索引在正则表达式中几乎没有用处。
我没有特定的引擎可以建议。
然而,如果您可以接受正则表达式语法的子集,搜索引擎可以存储额外的标记以有效匹配相当复杂的表达式。Solr/Lucene允许自定义分词,同一个单词可以生成多个标记,并具有各种规则集。
我将以我的名字为例:“Mark marks the spot.”
不区分大小写并带有词干处理:(mark,mark,spot)
区分大小写且不带有词干处理:(Mark,marks,spot)
区分大小写并带有NLP同义词扩展:([Mark,Marc],[mark,indicate,to-point],[spot,position,location,beacon,coordinate])
现在朝着您的问题发展,不区分大小写,带有词干处理、去重和自动完成前缀匹配:([m,ma,mar,mark],[s,sp,spo,spot])
如果您想要“子字符串”样式匹配,它将是:([m,ma,mar,mark,a,ar,ark,r,rk,k],[s,sp,spo,spot,p,po,pot,o,ot,t])
一个单一的搜索索引包含所有这些不同形式的标记,并选择在每种类型的搜索中使用哪些标记。
让我们尝试使用正则表达式风格的文字"Missippi",并使用字面标记:[m,m?,m+,i,i?,i+,s,ss,s+,ss+...]等。
实际规则取决于正则表达式子集,但希望模式变得更清晰。您甚至可以进一步扩展以匹配其他正则表达式片段,然后使用一种短语搜索形式来定位匹配项。
当然,索引会非常大,但根据项目要求可能是值得的。您还需要查询解析器和应用程序逻辑。
我意识到,如果您正在寻找一个预制引擎,这并不能满足您的需求,但从理论上讲,这是我处理它的方式(假设这确实是一个要求!)。如果有人只想要子字符串匹配和灵活的通配符匹配,那么在索引中可以少用很多标记。
就预制应用而言,您可以查看OpenGrok,用于源代码索引,它不是完整的正则表达式,但对源代码的理解很好。
*go
或go*
或intitle:"*go"
,这里是链接:http://www.hackcollege.com/blog/2011/11/23/infographic-get-more-out-of-google.html。