加速正则表达式以禁止 url 中的单词列表
Speed up regexp to ban wordlist from urls
我正在研究一个正则表达式,旨在禁止在 url 中包含某些词的本地网站。网站的结构是:
http|https://mysite.si 禁止词可能出现在“.si”之前或之后(在路径中)。我这样做是因为我的内容过滤器不太擅长阻止我不想让我的孩子接触的本地网站。到目前为止,我已经想出了以下内容:
(?!.*(word1|word2|word3...|wordx))(https|http)://.*[.]si
其中 wordx 代表禁用词。虽然我很高兴上面过滤掉了我想要它过滤掉的东西,但我发现性能太慢(单词列表由 400 个单词组成)并且非常感谢任何改进性能的建议。
您可以通过将交替更改为 https?://
并首先匹配协议,然后在其后添加否定前瞻来使模式的性能稍微好一些。
为了匹配字符串,如果不能有空格,可以将.*
更改为\S*
以匹配非空白字符。
如果您可能知道哪些词比其他词出现得更多,您可以在开头添加更频繁的词,例如使量词非贪婪以更快地获得断言结果。
为防止部分匹配,您可以在模式周围添加单词边界 \b
。
根据单词列表,您还可以在组周围添加单词边界 \b(?:word1|word2|word3)\b
。
\bhttps?://(?!\S*?(?:word1|word2|word3...|wordx))\S*[.]si\b
我正在研究一个正则表达式,旨在禁止在 url 中包含某些词的本地网站。网站的结构是: http|https://mysite.si 禁止词可能出现在“.si”之前或之后(在路径中)。我这样做是因为我的内容过滤器不太擅长阻止我不想让我的孩子接触的本地网站。到目前为止,我已经想出了以下内容:
(?!.*(word1|word2|word3...|wordx))(https|http)://.*[.]si
其中 wordx 代表禁用词。虽然我很高兴上面过滤掉了我想要它过滤掉的东西,但我发现性能太慢(单词列表由 400 个单词组成)并且非常感谢任何改进性能的建议。
您可以通过将交替更改为 https?://
并首先匹配协议,然后在其后添加否定前瞻来使模式的性能稍微好一些。
为了匹配字符串,如果不能有空格,可以将.*
更改为\S*
以匹配非空白字符。
如果您可能知道哪些词比其他词出现得更多,您可以在开头添加更频繁的词,例如使量词非贪婪以更快地获得断言结果。
为防止部分匹配,您可以在模式周围添加单词边界 \b
。
根据单词列表,您还可以在组周围添加单词边界 \b(?:word1|word2|word3)\b
。
\bhttps?://(?!\S*?(?:word1|word2|word3...|wordx))\S*[.]si\b