首页 > 解决方案 > 如何修复替换正则表达式标志组件中的错误?

问题描述

我使用的是 nutch 1.14,因为我使用的是 GCS 索引器。这是我在 nutch-site.xml 中的内容

<property>  
    <name>index.replace.regexp</name>  
    <value>  
        urlmatch=.*example.com\/[a-zA-Z0-9-]+  
        url:category=/https:\/\/www.example.com\/([a-zA-Z0-9-]+)/$1/  
    </value>  
</property>  

我收到错误消息:

$ grep 'replace' logs/hadoop.log  
ERROR replace.ReplaceIndexer - Pattern           
url:category=/https:\/\/www.example.com\/([a-zA-Z0-9-]+)/$1/, has invalid flags component  

当我将 nutch-site.xml 中的行更改为:

-url:category=/https:\/\/www.mydomain.com\/([a-zA-Z0-9-]+)/$1/2  

我想在类别中获取部分 url。例如:如果 url 是https://www.example.com/testcategory,我喜欢类别为 testcategory

谢谢。

标签: nutch

解决方案


如果我理解正确,您想获取域(example.com)之后的内容并将其放在类别字段中,对吗?

在这种情况下,您的正则表达式中有错误。您想要捕获所有内容,example.com/<category>然后您需要配置您的urlmatch喜欢:

urlmatch=.*example\.com\/([a-zA-Z0-9-]+)

在这种情况下([a-zA-Z0-9-]+),将创建一个可通过$1. 然后你可以像这样设置字段:

 url:category=$1

这将获取捕获组捕获的内容并将其放置在一个category字段中。

您可以在https://regex101.com/r/bMLqOq/1中测试正则表达式。


推荐阅读