正则表达式(亦称REGEX或REGEXP)帮助您找到与特定模式匹配的URLs或文本。
正则表达式的工作原理
让我们从最简单的例子转到更高级版的例子。
以下配置包含所有包含“blog”一词的URL,并排除包含“product”一词的URL。
这指示我们的机器人抓取:
https://ahrefs.com/blog
https://ahrefs.com/blog/seo-techniques/
https://ahrefs.com/academy/blogging-for-business
并忽略:
https://ahrefs.com/blog/category/product-blog/ 
https://ahrefs.com/blog/ecommerce-out-of-stock-products/
这很简单,对吧?
但如果您想特别包含 /blog/ 子文件夹中的URL,但不包括https://ahrefs.com/academy/blogging-for-business,该怎么办?
您可以使用更高级的模式:
您可能想知道“blog”前后的那些符号是什么。
在正则表达式中,您需要“转义”一些符号,以免它们被识别为特殊字符。 为此,请在字符前使用反斜杠\。
例如,正则表达式中的简单点.表示任何字符。 但\.作为句号符号工作。 这就是为什么我在上面的示例中像这样对斜线字符进行转义:\/
Ahrefs如何处理多个REGEX表达式
请注意,可以在Site Audit的抓取设置中应用多个模式以包含或排除URL。 如果某项规则没有找到匹配项,该规则将被跳过。
以上规则将指示我们的爬虫抓取包含以下单词的URL:
“blog”或者“product”
并且不包含以下单词:
“blogging”或“productive”。
对于多个URL重写规则,每个新规则将依次对之前重写的结果执行。
一些便捷的正则表达式令牌
^ - 此符号表示URL的开头
$ - 此符号表示URL的结尾
. - 小数点匹配任何单个字符
* - 匹配前面的表达式0次或多次
+ - 匹配至少1次的前面的
? - 匹配上一个的0次或1次
| - 等同于或。
[__] - 类似于|,但可以用来定义范围
(__) - 括号将正则表达式括起来
\d - 匹配一个数字
\D - 匹配一个非数字
\w - 匹配一个单词字符
\W - 匹配一个非单词字符
不同的工具和平台可能使用不同的正则表达式库。 我们的Site Audit使用RE2。 您可以在这里找到其完整语法。
一些实用的示例
1。 /wp-content/子文件夹中的Https URLs
^https:.*\/wp-content\/
^ 指示URL的开头。 此规则将匹配所有以“https:”开头的URL,后跟在“/wp-content/”之前的0个或任意个字符.*。
匹配模式的URL:
https://ahrefs.com/blog/wp-content/uploads/2019/03/fb-ranking-1-image-1.png
不匹配模式的URL:
http://ahrefs.com/blog/wp-content/uploads/2019/03/fb-ranking-1-image-1.png
2。 子文件夹中的URL,包括目录URL本身。
\/blog(\/.*)?$
此规则将匹配以“/blog”结尾的所有URL,后面可以选择一个斜杠和0个或任意个字符(\/.*)?$。 此模式中的问号匹配括号中的表达式0到1次,使其可选。
匹配模式的URL:
https://ahrefs.com/blog 
https://ahrefs.com/blog/301-redirects/
不匹配模式的URL:
https://ahrefs.com/blogging 
https://ahrefs.com/academy/blogging-for-business
3。 包含@或%符号的URL
@|% 或 [@%]
| 和 [__]作为OR工作
匹配模式的URL:
https://ahrefs.com/@timsoulo 
https://ahrefs.com/%D1%81%D0%B5%D0%BE
不匹配模式的URL:
https://ahrefs.com/blog/nofollow-links
4. Woocommerce中的“Add to Cart”URL
\?add-to-cart=
请记住,?是正则表达式中的特殊符号。 若要将其用作简单的问号,请不要忘记像这样转义它:\?
匹配模式的URL:
https://yourdomain.com/?add-to-cart=25
不匹配模式的URL:
https://yourdomain.com/smartphones
5。 包含年份(4位数字)的URL
[0-9]{4} 或 \d{4}
[0-9]{4}将匹配所有包含四个{4}连续数字[0-9]的URL
\d{4}与\d的作用相同,表示一个数字
匹配模式的URL:
https://yourdomain.com/best-smartphones-2019
不匹配模式的URL:
https://yourdomain.com/smartphones
6。 子域的所有URL(包括http和https)
^https?:\/\/help.ahrefs.com
此规则将匹配以"http://help.ahrefs.com"或"https://help.ahrefs.com"开头的所有URL。
这里的问号s?表示“s”是可选的,所以http和https都将匹配此规则。
匹配模式的URL:
https://help.ahrefs.com 
http://help.ahrefs.com/ 
http://help.ahrefs.com/site-audit
不匹配模式的URL:
https://ahrefs.com/site-audit 
ftp://help.ahrefs.com
7。 各种文件URL
\.(jpg|gif|bmp|png|css|pdf)$
此规则将匹配以.jpg, .gif, .bmp, .png, .css, 或.pdf结尾的所有URLs。
您可以缩减此表达式以定位更少的扩展名。 例如,仅以.jpg或.png结尾的URLs:
 .*\.(jpg|png)$
括号(__)将正则表达式括起来且|代表或者
匹配模式的URL:
https://ahrefs.com/blog/wp-content/uploads/2019/03/fb-ranking-1-image-1.png 
http://ahrefs.com/blog/wp-content/uploads/2019/03/fb-ranking-1-image-1.png
不匹配模式的URL:
https://ahrefs.com/site-audit
8。 在Site Audit中使用URL重写规则来抓取测试网站
您可以在Site Audit设置中使用URL重写规则将URL的某些部分替换成另一个值。
例如。 当您的测试网站建立在子域上时,例如staging.ahrefs.com
此规则会将每个URL中的“ahrefs.com”替换为“staging.ahrefs.com”
9。 使用带有编号捕获组的URL重写规则
使用捕获组,您可以用一个规则替换URL的多个部分。
匹配模式:
www\.ahrefs\.com([^\?|#]*)?([#]?[^\?]*)\??(.*)
替换为:
www.ahrefs.com\1?parameter1=5273&\2?parameter2=7465&\3
([^\?|#]*) 是第一个捕获组
([#]?[^\?]*) 是第二个捕获组
(.*) 是第三个捕获组
\1?parameter1=5273&\2\3
用“?parameter1=5273”替换第1个捕获组的值。
\2?parameter2=7465&用“?parameter2=7465&”替换第2个捕获组的值。
\3插入匹配到的第三个捕获组的值
6。 过滤长度超过50个字符的文本
^[\s\S]{50,}$
更多资源
希望这篇文章帮助您学习一些正则表达式可以做的很酷的技巧。
您可以在此网站上测试您的正则表达式:https://regex101.com/。 请注意,您应该从左侧菜单中选择“Golang”。



